我正在用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(&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;
}
可能导致死锁的原因是什么?
答案 0 :(得分:2)
你的代码很干净。
如果我们跳过罕见的内存违规情况等,有两种可能导致死锁:
从任何一个函数的“锁定”部分调用A(),B()或C()中的任何一个。
在没有pthread_mutex_unlock()的情况下从任何这些函数的“锁定”部分返回。
由于在同一个互斥锁上双重调用pthread_mutex_lock(),这两种情况都会导致死锁。
对不起,如果我的英语不好:)