我使用 CreateMutex
创建了一个互斥体,然后使用 WaitForSingleObject
等待某个线程,直到互斥体被释放并取得它的所有权(使用无超时)。
因此,如果该函数返回WAIT_OBJECT_0
,我就可以继续我的结婚之路并执行线程的代码。
但是,如果该函数返回 WAIT_ABANDONED
,我是否仍然可以执行该代码,并期望在我的互斥体上调用 WaitForSingleObject
的任何其他线程都会被卡住,直到我发布?
如果拥有线程在没有释放互斥体的情况下终止,我希望调用线程获得所有权并且事情继续照常进行。
编辑:令我困惑的是,MSDN 表示,在情况 (2) 未发出信号的情况下,互斥体的状态与发出信号的状态 (1) 相反。这对我意味着什么?
最佳答案
如果您返回WAIT_ABANDONED
,则意味着您已获得互斥锁的所有权。问题是您不知道受其保护的资源的状态。
例如,假设线程 X 获取一个互斥体并开始操纵受该互斥体保护的对象的状态,然后被终止。状态未知并且互斥体未被保留。当您去等待该互斥锁时,您将收到它,但您不会知道该状态。
关于C++\Win32 对 WaitForSingleObject 函数返回值含义感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889117/