我有一个用CreateMutex
创建的互斥锁,然后我使用WaitForSingleObject
在某个线程上等待,直到Mutex被释放并获得它的所有权(没有超时)。
因此,如果函数返回WAIT_OBJECT_0
,我可以继续我的结婚方式并执行线程的代码。
但是,如果函数返回WAIT_ABANDONED
,我是否仍然可以执行代码,期望在我的Mutex上调用WaitForSingleObject
的任何其他线程在我发布之前都会被卡住?
如果拥有的线程在没有释放Mutex的情况下终止,我希望调用线程获得所有权以及继续正常运行的事情。
答案 0 :(得分:1)
如果您返回WAIT_ABANDONED
,则表示您已获得互斥锁的所有权。问题是您不知道受其保护的资源的状态。
例如,假设Thread X获取一个互斥锁并开始操纵受该互斥锁保护的某些东西的状态,然后被杀死。状态未知,互斥锁未被保留。当你在那个互斥锁上等待时,你会收到它,但你不会知道那个状态。
答案 1 :(得分:1)
获取WAIT_ABANDONED表示代码中存在相当严重的问题。当一个线程拥有一个互斥锁但它终止而没有调用ReleaseMutex()时,你会得到这个状态码。
这可能是您代码中的一个简单错误,只是忘记调用该函数。它可能是真正讨厌的东西的标志,线程在异常中死亡并吞噬它。但没有正确清理状态,包括忘记释放互斥锁。吞没异常而不进行清理总是一个令人讨厌的错误生成器,它使程序无法预测且无法识别。