有一种情况,我有两个线程都使用相同的互斥锁。一个线程锁定了互斥锁并崩溃了。互斥状态是什么?它是否仍然被锁定并且第二个线程从未拥有该互斥锁?意味着死锁情况?
编辑 - 还解释了 Linux 系统上 pthread 的一个案例
最佳答案
既然你没有指定什么操作系统,我就告诉你在Win32中会发生什么。
在 Win32 中,第二个线程在等待已终止线程拥有的互斥锁时将获得 WAIT_ABANDONED。 注意接收到 WAIT_ABANDONED 表示第二个线程已经接收到互斥锁,所以不会出现死锁。 第二个线程应该检测 WAIT_ABANDONED 结果并验证互斥锁保护的资源是否处于有效状态。如果它可以检测到损坏并且没有检测到任何损坏,则可以安全地继续。如果没有,提出某种错误是个好主意。
对于互斥锁的某些实现,无法检测到拥有它的线程已终止,最终会陷入死锁。
对于互斥锁的某些实现,有一种方法可以检测拥有线程是什么,确定拥有线程已终止,然后获取互斥锁的所有权。
关于multithreading - 线程因锁定的互斥锁而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163883/