スレッド A: 変数 m_bPaused を設定します。m_pPauseEvent は、wait() および set() インターフェイスを提供するセマフォ オブジェクトです。スレッド A はこれを呼び出して一時停止します。
PausePlay(){
m_bPaused = true; // A1
m_pPauseEvent->Wait(0); //A2 wait for the B thread is enter to the waiting
}
スレッド B:
if (m_bPaused)
{
m_pPauseEvent->Set(); //B1
m_pPauseEvent->Wait(0); //B2 0 wait forever
}
そして、スレッド A を呼び出してスレッド B を続行します。
m_bPaused = false; //A3
m_pPauseEvent->Set(); //A4
一時停止すると、B1 が実行されるまで待ちます。スレッド A が戻ります。ここでデッドロックになりますか? スレッド A で続行を呼び出し、A3 に実行すると。その間、スレッド B はまだ B1 と B2 の間にあるため、スレッド A は行 m_pPauseEvent->Set() を終了します。スレッド B は、A4 によって送信されたシグナルを決して受信しません。デッドロック! これは起こりますか?