使用WaitForSingleObject功能。
如果调用该函数并超时,是否仍需要释放互斥锁?
即。如果五秒钟过去,ReleaseMutex应该在1.
还是2.
?
WaitForSingleObject(5 second time out)
{
//access shared resource
//1. - ReleaseMutex() here?
}
//2. - ReleaseMutex() here?
答案 0 :(得分:6)
没有。如果对WaitForSingleObject
的调用超时,则表示您尚未获取互斥锁,因此不应将其释放。
即。您只需要在第1位ReleaseMutex
。
答案 1 :(得分:2)
您的案例#1是正确的。如果您在该呼叫上超时,则表示未获取资源,您不应尝试将其释放。
答案 2 :(得分:2)
如果您拥有所有权,则只需要释放互斥锁。请注意,有4个可能的返回值,在2个案例中,您获得所有权,而在2个案例中,您没有。
WAIT_ABANDONED - 您拥有所有权并需要释放互斥锁,但前一个所有者在没有明确释放互斥文件的情况下终止,因此共享状态可能不一致。
WAIT_OBJECT_0 - 您拥有所有权。您需要释放互斥文件。
WAIT_TIMEOUT - 在超时期间未释放互斥文件
WAIT_FAILED - 通常是由于代码中的错误(即无效句柄)。