如果超时,是否还需要释放互斥锁?

时间:2011-08-31 17:14:40

标签: c++ c windows winapi synchronization

使用WaitForSingleObject功能。

如果调用该函数并超时,是否仍需要释放互斥锁?

即。如果五秒钟过去,ReleaseMutex应该在1.还是2.

WaitForSingleObject(5 second time out)
{
  //access shared resource

  //1. - ReleaseMutex() here?
}
  //2. - ReleaseMutex() here?

3 个答案:

答案 0 :(得分:6)

没有。如果对WaitForSingleObject的调用超时,则表示您尚未获取互斥锁,因此不应将其释放。

即。您只需要在第1位ReleaseMutex

答案 1 :(得分:2)

您的案例#1是正确的。如果您在该呼叫上超时,则表示未获取资源,您不应尝试将其释放。

答案 2 :(得分:2)

如果您拥有所有权,则只需要释放互斥锁。请注意,有4个可能的返回值,在2个案例中,您获得所有权,而在2个案例中,您没有。

WAIT_ABANDONED - 您拥有所有权并需要释放互斥锁,但前一个所有者在没有明确释放互斥文件的情况下终止,因此共享状态可能不一致。

WAIT_OBJECT_0 - 您拥有所有权。您需要释放互斥文件。

WAIT_TIMEOUT - 在超时期间未释放互斥文件

WAIT_FAILED - 通常是由于代码中的错误(即无效句柄)。