【发布时间】:2020-08-20 21:26:48
【问题描述】:
我有下面的代码,其中函数 bar 锁定了互斥体,然后调用了函数 foo,但是函数 foo 锁定了同一个互斥体。根据我的理解,会发生死锁,因为 foo 试图锁定同一个互斥体并且它已被锁定在函数栏中。但下面的代码执行没有任何停止。谁知道原因??
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void foo()
{
pthread_mutex_lock(&mutex);
cout<<"excuting foo!!"<<endl;
pthread_mutex_unlock(&mutex);
}
void bar()
{
pthread_mutex_lock(&mutex);
cout<<"excuting bar!!"<<endl;
foo();
pthread_mutex_unlock(&mutex);
}
int main()
{
bar();
}
【问题讨论】:
-
我的死锁。我建议填写minimal reproducible example,以防我在填空时不小心修复了“错误”。
-
您也没有检查 pthread_mutex_lock 的返回值。如果你的系统支持一些基本的死锁检测,它可能只是返回一个错误。