C 基本死锁问题,多个函数中的一个互斥
我正在用C写一个程序,其中有3个函数,a,B和C。我有一个静态互斥锁作为全局,它锁定了对这些函数的访问。函数A、B和C可以从多线程按任意顺序调用,因此,我的代码如下所示:C 基本死锁问题,多个函数中的一个互斥,c,pthreads,mutex,C,Pthreads,Mutex,我正在用C写一个程序,其中有3个函数,a,B和C。我有一个静态互斥锁作为全局,它锁定了对这些函数的访问。函数A、B和C可以从多线程按任意顺序调用,因此,我的代码如下所示: static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; int A() { pthread_mutex_lock(&mutex); ... do some processing... pthread_mutex_unlock(&
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int A() {
pthread_mutex_lock(&mutex);
... do some processing...
pthread_mutex_unlock(&mutex);
return anInt;
}
int B() {
pthread_mutex_lock(&mutex);
... do some processing...
pthread_mutex_unlock(&mutex);
return anInt;
}
int C() {
pthread_mutex_lock(&mutex);
... do some processing...
pthread_mutex_unlock(&mutex);
return anInt;
}
什么可能导致死锁?您的代码是干净的
如果我们跳过内存冲突等罕见情况,死锁有两种可能性:
对不起,如果我的英语不好:)你能发布更多的代码吗?除了缺少返回语句外,还有什么看起来是正确的。在调用
pthread\u mutex\u unlock
之前,代码中是否有退出函数的路径?或者您的一个函数是否调用锁中的其他函数?@simonc No,a,B和C是按顺序调用的,但由不同的线程调用,因此可能会按顺序调用。另一种可能是有东西(未显示)正在互斥体的内存中写入。您的英语很好,感谢您的回复。这是我自己考虑过的两种可能性,但在回顾我的代码时,我没有看到它们是如何产生的,所以我很好奇是否还有第三种可能性。我得仔细看看我的代码。