gpt4 book ai didi

linux - 如果在 Linux 中尝试两次锁定同一个互斥量,为什么线程不会死锁?

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:51 25 4
gpt4 key购买 nike

我读了 Unix 环境高级编程 3rd,11.6.2 死锁避免:

A thread will deadlock itself if it tries to lock the same mutex twice

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

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;
}

主线程没有阻塞,输出为:

lock 1

lock 2

unlock 1

unlock 2

为什么会这样?

最佳答案

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

我刚刚测试了你的 prog 编译为

cc -pthread meh.c

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

关于linux - 如果在 Linux 中尝试两次锁定同一个互斥量,为什么线程不会死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43991392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com