使用C ++超时调用多个互斥锁上的WaitForMultipleObjects

时间:2013-03-13 05:37:13

标签: c++ winapi synchronization mutex

如果我在多个互斥锁上调用WaitForMultipleObjects,请执行以下操作:

HANDLE hMutexes[5] = {...};   //All mutexes
DWORD dwRet = WaitForMultipleObjects(5, hMutexes, TRUE, 5 * 1000);

dwRet返回WAIT_TIMEOUT,状态是hMutexes数组中的互斥量?或者,换句话说,我应该在其中任何一个上打ReleaseMutex吗?

2 个答案:

答案 0 :(得分:4)

WaitForMultipleObjects函数的文档声明:

  

当bWaitAll为TRUE时,...该函数不会修改指定的状态   对象,直到所有对象的状态都已设置为已发出信号。例如,a   可以发信号通知互斥锁,但是直到状态为止,线程才会获得所有权   其他对象也设置为发信号。

因此您无需担心这种情况。如果WaitForMultipleObjects返回WAIT_TIMEOUT,则您不拥有任何互斥锁。如果它返回WAIT_OBJECT_0你拥有所有这些。

答案 1 :(得分:0)

如果您获得WAIT_TIMEOUT,则表示没有发出互斥信号,因此您不应在其中任何一个中调用ReleaseMutex