Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 基本死锁问题,多个函数中的一个互斥_C_Pthreads_Mutex - Fatal编程技术网

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(&

我正在用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;
}
什么可能导致死锁?

您的代码是干净的

如果我们跳过内存冲突等罕见情况,死锁有两种可能性:

  • 从任何一个函数的“锁定”部分调用A()、B()或C()中的任何一个

  • 在不使用pthread_mutex_unlock()的情况下,从这些函数的“锁定”部分返回

  • 这两种情况都会导致死锁,因为在同一个互斥体上双重调用pthread_mutex_lock()


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

    你能发布更多的代码吗?除了缺少返回语句外,还有什么看起来是正确的。在调用
    pthread\u mutex\u unlock
    之前,代码中是否有退出函数的路径?或者您的一个函数是否调用锁中的其他函数?@simonc No,a,B和C是按顺序调用的,但由不同的线程调用,因此可能会按顺序调用。另一种可能是有东西(未显示)正在
    互斥体的内存中写入。您的英语很好,感谢您的回复。这是我自己考虑过的两种可能性,但在回顾我的代码时,我没有看到它们是如何产生的,所以我很好奇是否还有第三种可能性。我得仔细看看我的代码。