如果它试图在Linux中两次锁定相同的互斥锁,为什么不会出现线程死锁?

时间:2017-05-16 02:01:56

标签: linux multithreading

我读过Unix环境中的高级编程,11.6.2死锁避免:

  

如果一个线程试图锁定相同的互斥锁两次

,它将自行死锁

为了验证这一点,我写了一个演示:

pthread_mutex_t mutex;
int main() {
    pthread_mutex_init(&mutex, NULL);
    pthread_mutex_lock(&mutex);
    printf("lock 1\n");
    pthread_mutex_lock(&mutex);
    printf("lock 2\n");
    pthread_mutex_unlock(&mutex);
    printf("unlock 1\n");
    pthread_mutex_unlock(&mutex);
    printf("unlock 2\n");
    pthread_mutex_destroy(&mutex);
    return 0;
}

主线程未被阻止,输出为:

  

锁定1

     

锁定2

     

解锁1

     

解锁2

为什么会这样?

1 个答案:

答案 0 :(得分:1)

你是如何编译的?我怀疑你没有将-pthread选项传递给编译器和pthread相关的东西,比如上面的东西仍然是noops(即它们没有被拉入)。

我刚刚测试了编译为

的编程
  

cc -pthread meh.c

,结果很好地挂在“锁定1”之后。