multithreading - 线程因锁定的互斥锁而崩溃

标签 multithreading pthreads mutex

有一种情况,我有两个线程都使用相同的互斥锁。一个线程锁定了互斥锁并崩溃了。互斥状态是什么?它是否仍然被锁定并且第二个线程从未拥有该互斥锁?意味着死锁情况?

编辑 - 还解释了 Linux 系统上 pthread 的一个案例

最佳答案

既然你没有指定什么操作系统,我就告诉你在Win32中会发生什么。

在 Win32 中,第二个线程在等待已终止线程拥有的互斥锁时将获得 WAIT_ABANDONED。 注意接收到 WAIT_ABANDONED 表示第二个线程已经接收到互斥锁,所以不会出现死锁。 第二个线程应该检测 WAIT_ABANDONED 结果并验证互斥锁保护的资源是否处于有效状态。如果它可以检测到损坏并且没有检测到任何损坏,则可以安全地继续。如果没有,提出某种错误是个好主意。

对于互斥锁的某些实现,无法检测到拥有它的线程已终止,最终会陷入死锁。

对于互斥锁的某些实现,有一种方法可以检测拥有线程是什么,确定拥有线程已终止,然后获取互斥锁的所有权。

关于multithreading - 线程因锁定的互斥锁而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163883/

相关文章:

java - 如何等待Java中线程的启动

c - 如果正在等待的线程自行分离怎么办?

linux - 有没有办法链接 linux 的线程 TID 和 pthread_t "thread ID"

c# - 如果我在下面的代码中重用现有的互斥体,为什么会得到一个新创建的互斥体?

c - 使用互斥体和条件变量调度多个线程

c - 互斥锁线程

java - 如何使方法线程安全,即使我忘记在不更改文件的情况下在方法或 block 级别添加同步?

c++ - POSIX pthread 多次使用同一个线程

C# 线程 - resetThread 是 'variable' 但像 'method' 一样使用

c - 使用pthread在C中生成随机数的最正确方法是什么