次のコードを実行するスレッド 1 があります。
unique_lock<mutex> ul(m);
while(condition == true)
cv.wait(ul);
そして、このコードを実行するスレッド 2:
condition = false;
cv.notify_one();
残念ながら、私はタイミングの問題にぶつかっています:
T1: condition checks true
T2: condition set to false
T2: cv.notify_one()
T1: cv.wait()
スレッド 1 は通知を完全に逃し、wait() でブロックされたままになります。述語を使用するバージョンの wait() を使用してみましたが、基本的に同じ結果が得られました。つまり、述語の本体でチェックが実行されますが、返される前に条件の値が変更され、通知が送信されます。その後、述語が返されます。
どうすればこれを修正できますか?