用C++超时调用多个互斥体上的WaITFrimeType对象

用C++超时调用多个互斥体上的WaITFrimeType对象,c++,winapi,synchronization,mutex,C++,Winapi,Synchronization,Mutex,如果我这样调用多个互斥体: HANDLE hMutexes[5] = {...}; //All mutexes DWORD dwRet = WaitForMultipleObjects(5, hMutexes, TRUE, 5 * 1000); 而dwRet作为WAIT_TIMEOUT返回,hMutexes数组中的互斥将处于什么状态?或者,换言之,我应该对其中任何一个调用ReleaseMutex吗?WaitForMultipleObjects函数状态的文档: 当bWaitAll为真时。。。

如果我这样调用多个互斥体:

HANDLE hMutexes[5] = {...};   //All mutexes
DWORD dwRet = WaitForMultipleObjects(5, hMutexes, TRUE, 5 * 1000);
而dwRet作为WAIT_TIMEOUT返回,hMutexes数组中的互斥将处于什么状态?或者,换言之,我应该对其中任何一个调用ReleaseMutex吗?

WaitForMultipleObjects函数状态的文档:

当bWaitAll为真时。。。该函数不修改指定对象的状态 对象,直到所有对象的状态都设置为“已发信号”。例如,一个 可以用信号通知互斥体,但线程在状态为 其他对象也设置为有信号

因此,您不必担心这种情况。如果WaitForMultipleObjects返回WAIT_TIMEOUT,则您不拥有任何互斥对象。如果它返回WAIT\u OBJECT\u 0,则您拥有所有这些对象。

WaitForMultipleObjects函数的文档状态为:

当bWaitAll为真时。。。该函数不修改指定对象的状态 对象,直到所有对象的状态都设置为“已发信号”。例如,一个 可以用信号通知互斥体,但线程在状态为 其他对象也设置为有信号

因此,您不必担心这种情况。如果WaitForMultipleObjects返回WAIT_TIMEOUT,则您不拥有任何互斥对象。如果它返回WAIT\u OBJECT\u 0,则表示您拥有所有这些对象。

如果您得到WAIT\u超时,则表示没有发出互斥信号,因此您不应该在其中任何一个对象中调用ReleaseMutex。

如果您得到WAIT\u超时,则表示没有发出互斥信号,因此您不应该在其中任何一个对象中调用ReleaseMutex