我在无信号状态下创建了一个互斥体
HANDLE hmutex= CreateMutex(NULL,FALSE,"");---1现在我要打电话
DWORD dw = WaitForSingleObject(hmutex,0); ---2由于hmutex未发出信号,WaitForSingleObject将立即返回,但hmutex的状态是否会更改为信号??
如果另一个线程调用第二条语句,会发生什么?
发布于 2013-12-16 17:40:45
不,它不会改变为信号。
关于该调用,以下不变量是正确的:
在任何情况下,都有人拥有互斥体。但是,如果另一个线程是所有者,它可以在任何时候释放互斥锁,因此在函数返回几个处理器周期后,它可能会被释放(发出信号)。
发布于 2013-12-16 17:56:38
不要将互斥对象看作是信号对象或非信号对象。相反,把它们想成是拥有的还是不拥有的。
下面调用中的第二个参数表示,互斥最初是没有所有权的。
HANDLE hmutex= CreateMutex(NULL,FALSE,"");下面第一次调用时,调用线程将获得互斥锁的所有权。如果另一个线程在互斥对象属于第一个线程时进行相同的调用,则返回值为WAIT_TIMEOUT (258个小数点,102个十六进制)。
DWORD dw = WaitForSingleObject(hmutex,0);这里有一些指南要遵循。如果需要限制对多个进程共享的资源的访问,请使用互斥。如果要在单个进程中限制对资源的访问,请改用部分。如果您希望一个线程可以用来向另一个线程发送信号的对象,请使用事件。
https://stackoverflow.com/questions/20617034
复制相似问题