スレッド 1
...
SetEvent(_event)
;
EnterCriticalSection(crit);
ResetEvent(_event);
LeaveCriticalSection(crit);
スレッド 2:
EnterCriticalSection(crit);
WaitForSingleObject(_event, forever);
LeaveCriticalSection(crit);
スレッド 1 がイベントを設定すると、スレッド 2 は引き続き待機し、永遠に待機します。したがって、Thead 1 はロックを取得しようとしますが、デッドロックに失敗します。OK である SetEvent の戻り値を確認します。
スレッド 1 の EnterCriticalSection と LeaveCriticalSection を削除しましたが、SetEvent を何度も呼び出した後でもイベントが設定されていないことがわかりました。