用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