首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WaitForSingleObject与timeout=0

WaitForSingleObject与timeout=0
EN

Stack Overflow用户
提问于 2013-12-16 17:33:01
回答 2查看 3.4K关注 0票数 2

我在无信号状态下创建了一个互斥体

代码语言:javascript
复制
HANDLE hmutex= CreateMutex(NULL,FALSE,"");---1

现在我要打电话

代码语言:javascript
复制
DWORD dw = WaitForSingleObject(hmutex,0); ---2

由于hmutex未发出信号,WaitForSingleObject将立即返回,但hmutex的状态是否会更改为信号??

如果另一个线程调用第二条语句,会发生什么?

EN

回答 2

Stack Overflow用户

发布于 2013-12-16 17:40:45

不,它不会改变为信号。

关于该调用,以下不变量是正确的:

  • 无论互斥状态如何,它都会立即返回。
  • 互斥对象变为拥有(无信号),而不考虑其以前的状态。
  • 返回值告诉您是获得了所有权,还是由于争用而失败。

在任何情况下,都有人拥有互斥体。但是,如果另一个线程是所有者,它可以在任何时候释放互斥锁,因此在函数返回几个处理器周期后,它可能会被释放(发出信号)。

票数 6
EN

Stack Overflow用户

发布于 2013-12-16 17:56:38

不要将互斥对象看作是信号对象或非信号对象。相反,把它们想成是拥有的还是不拥有的。

下面调用中的第二个参数表示,互斥最初是没有所有权的。

代码语言:javascript
复制
HANDLE hmutex= CreateMutex(NULL,FALSE,"");

下面第一次调用时,调用线程将获得互斥锁的所有权。如果另一个线程在互斥对象属于第一个线程时进行相同的调用,则返回值为WAIT_TIMEOUT (258个小数点,102个十六进制)。

代码语言:javascript
复制
DWORD dw = WaitForSingleObject(hmutex,0);

这里有一些指南要遵循。如果需要限制对多个进程共享的资源的访问,请使用互斥。如果要在单个进程中限制对资源的访问,请改用部分。如果您希望一个线程可以用来向另一个线程发送信号的对象,请使用事件

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20617034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档