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

取得した場合WAIT_TIMEOUTは、ミューテックスが通知されていないことを意味するためReleaseMutex、いずれも呼び出さないでください。

于 2013-03-13T05:53:34.170 に答える