2

次の C++ コードがある場合 (Windows Os 用):

HANDLE hEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);
HANDLE hMutex = ::CreateMutex(NULL, FALSE, NULL);

HANDLE hHandles[] = {
    hEvent,
    hMutex
};

DWORD dwR = ::WaitForMultipleObjects(2, hHandles, FALSE, INFINITE) - WAIT_OBJECT_0;

//if dwR == 0, what state is hMutex in?
//Or, do I need to call ReleaseMutex(hMutex) in that case?

ミューテックスに関するこの状況を処理する方法がわかりません。

4

3 に答える 3

4

dwRは完全にゼロではありませんWAIT_OBJECT_0 + 0。つまり、最初に提供されたハンドルで待機が満たされたということです。これはイベントのハンドルなので、ミューテックスに触れる必要はありません。

結果が の場合はWAIT_OBJECT_0 + 1、待機に成功するために使用されたミューテックス ハンドルです。やるべきことが終わったら、 を呼び出して所有権を解放しますReleaseMutex

于 2012-09-06T07:36:18.677 に答える