如果我在多个互斥锁上调用WaitForMultipleObjects,请执行以下操作:
HANDLE hMutexes[5] = {...}; //All mutexes
DWORD dwRet = WaitForMultipleObjects(5, hMutexes, TRUE, 5 * 1000);
dwRet
返回WAIT_TIMEOUT
,状态是hMutexes
数组中的互斥量?或者,换句话说,我应该在其中任何一个上打ReleaseMutex
吗?
答案 0 :(得分:4)
WaitForMultipleObjects
函数的文档声明:
当bWaitAll为TRUE时,...该函数不会修改指定的状态 对象,直到所有对象的状态都已设置为已发出信号。例如,a 可以发信号通知互斥锁,但是直到状态为止,线程才会获得所有权 其他对象也设置为发信号。
因此您无需担心这种情况。如果WaitForMultipleObjects
返回WAIT_TIMEOUT
,则您不拥有任何互斥锁。如果它返回WAIT_OBJECT_0
你拥有所有这些。
答案 1 :(得分:0)
如果您获得WAIT_TIMEOUT
,则表示没有发出互斥信号,因此您不应在其中任何一个中调用ReleaseMutex
。