我读过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
为什么会这样?
答案 0 :(得分:1)
你是如何编译的?我怀疑你没有将-pthread选项传递给编译器和pthread相关的东西,比如上面的东西仍然是noops(即它们没有被拉入)。
我刚刚测试了编译为
的编程cc -pthread meh.c
,结果很好地挂在“锁定1”之后。