2

如果我像这样在多个互斥体上调用WaitForMultipleObjects :

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

dwRet返回为,数组WAIT_TIMEOUT中的互斥锁将处于什么状态?hMutexes或者,换句话说,我应该拜访ReleaseMutex他们中的任何一个吗?

4

2 回答 2

4

WaitForMultipleObjects函数的文档指出:

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

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

于 2013-03-13T05:48:33.003 回答
0

如果你得到 aWAIT_TIMEOUT这意味着没有互斥体被发出信号,所以你不应该调用ReleaseMutex它们中的任何一个。

于 2013-03-13T05:53:34.170 回答