基本死锁问题,多个函数中的一个互斥锁

时间:2013-05-10 21:41:10

标签: 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(&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;
}

可能导致死锁的原因是什么?

1 个答案:

答案 0 :(得分:2)

你的代码很干净。

如果我们跳过罕见的内存违规情况等,有两种可能导致死锁:

  1. 从任何一个函数的“锁定”部分调用A(),B()或C()中的任何一个。

  2. 在没有pthread_mutex_unlock()的情况下从任何这些函数的“锁定”部分返回。

  3. 由于在同一个互斥锁上双重调用pthread_mutex_lock(),这两种情况都会导致死锁。

    对不起,如果我的英语不好:)