Cra*_*zyC 5 multithreading mutex pthreads
有一种情况,我有两个线程都使用相同的互斥锁.一个线程锁定互斥锁并崩溃.互斥状态是什么?它仍然是锁定的,第二个线程永远不会拥有该互斥锁吗?意味着死锁的情况?
编辑 - 还解释了Linux系统上的pthread案例
由于您没有指定什么操作系统,我将告诉您 Win32 中会发生什么。
在 Win32 中,当第二个线程去等待已终止的线程所拥有的互斥体时,它会收到 WAIT_ABANDONED。请注意,接收 WAIT_ABANDONED 意味着第二个线程已接收到互斥锁,因此不会出现死锁。第二个线程应该检测 WAIT_ABANDONED 结果并验证受互斥体保护的资源是否处于有效状态。如果它可以检测到损坏并且没有检测到任何损坏,则可以安全地继续。如果没有,提出某种错误是个好主意。
对于互斥体的某些实现,无法检测拥有它的线程是否已终止,并且最终会陷入死锁。
对于互斥锁的某些实现,有一种方法可以检测所属线程是什么,确定所属线程已终止,然后获取互斥锁的所有权。