如果我像这样在多个互斥体上调用WaitForMultipleObjects :
HANDLE hMutexes[5] = {...}; //All mutexes
DWORD dwRet = WaitForMultipleObjects(5, hMutexes, TRUE, 5 * 1000);
并dwRet
返回为,数组WAIT_TIMEOUT
中的互斥锁将处于什么状态?hMutexes
或者,换句话说,我应该拜访ReleaseMutex
他们中的任何一个吗?
如果我像这样在多个互斥体上调用WaitForMultipleObjects :
HANDLE hMutexes[5] = {...}; //All mutexes
DWORD dwRet = WaitForMultipleObjects(5, hMutexes, TRUE, 5 * 1000);
并dwRet
返回为,数组WAIT_TIMEOUT
中的互斥锁将处于什么状态?hMutexes
或者,换句话说,我应该拜访ReleaseMutex
他们中的任何一个吗?
该WaitForMultipleObjects
函数的文档指出:
当 bWaitAll 为 TRUE 时,...该函数不会修改指定对象的状态,直到所有对象的状态都设置为已发出信号。例如,可以向互斥体发出信号,但在其他对象的状态也设置为已发出信号之前,线程不会获得所有权。
因此,您无需担心这种情况。如果WaitForMultipleObjects
返回WAIT_TIMEOUT
,您不拥有任何互斥锁。如果它返回WAIT_OBJECT_0
您拥有所有这些。
如果你得到 aWAIT_TIMEOUT
这意味着没有互斥体被发出信号,所以你不应该调用ReleaseMutex
它们中的任何一个。