如果互斥锁超时了,还需要释放它吗?

4

使用WaitForSingleObject函数。

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

即,如果五秒钟已经过去,ReleaseMutex应该在位置1.还是2.

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

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

3
如果你从未获得它,为什么需要释放它? - Duck
2
我不知道它是如何工作的,所以我才在问 ;) - T.T.T.
3个回答

6
不需要。如果调用WaitForSingleObject超时,则表示您未获取到互斥对象,因此不应该释放它。
也就是说,您只需要在位置1处使用ReleaseMutex

2
您的案例#1是正确的。如果在那个调用上超时了,这意味着该资源未被获取,您不应尝试释放它。

2

只有在获得所有权时才需要释放互斥锁。请注意,有4种可能的返回值,在2种情况下,您将获得所有权,在另外2种情况下则不会。

WAIT_ABANDONED - 您获得了所有权并需要释放互斥锁,但是前一个所有者未经显式释放互斥锁而终止,因此共享状态可能不一致。

WAIT_OBJECT_0 - 您已经获得了所有权。您需要释放互斥锁。

WAIT_TIMEOUT - 在超时期间未释放互斥锁。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接