C++\Win32 对 WaitForSingleObject 函数返回值含义感到困惑

标签 c++ multithreading winapi mutex

我使用 CreateMutex 创建了一个互斥体,然后使用 WaitForSingleObject 等待某个线程,直到互斥体被释放并取得它的所有权(使用无超时)。

因此,如果该函数返回WAIT_OBJECT_0,我就可以继续我的结婚之路并执行线程的代码。

但是,如果该函数返回 WAIT_ABANDONED,我是否仍然可以执行该代码,并期望在我的互斥体上调用 WaitForSingleObject 的任何其他线程都会被卡住,直到我发布?


如果拥有线程在没有释放互斥体的情况下终止,我希望调用线程获得所有权并且事情继续照常进行。


编辑:令我困惑的是,MSDN 表示,在情况 (2) 未发出信号的情况下,互斥体的状态与发出信号的状态 (1) 相反。这对我意味着什么?

最佳答案

如果您返回WAIT_ABANDONED,则意味着您已获得互斥锁的所有权。问题是您不知道受其保护的资源的状态。

例如,假设线程 X 获取一个互斥体并开始操纵受该互斥体保护的对象的状态,然后被终止。状态未知并且互斥体未被保留。当您去等待该互斥锁时,您将收到它,但您不会知道该状态。

关于C++\Win32 对 WaitForSingleObject 函数返回值含义感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11889117/

相关文章:

c++ - vs2010 (c++, win32) 文件写入

C++ 搜索函数

c - EnumWindows 和 CloseHandle

c++ - 使用 clang 的 ThreadSanitizer 和 TBB 避免误报

java - ThreadLocal InitialValue 被调用两次

Java 线程 : How does implementing runnable work for threading

Python - 在不同的线程上发送带有相同附件的多封电子邮件

c - 为什么窗口不能正确设置光标?

c++ - 在cpp文件中格式化printf语句

c++ - 单线捷径,用于将列表重新分配给阵列