条件変数を使用して、何かが発生したことを他のスレッドに知らせることができます。
mutex m;
condition_variable cv;
thread t1([&cv]{
// processing
...
cv.notify_one();
});
...
unique_lock<std::mutex> lck(m);
cv.wait(lck);
しかし、ご覧のとおり、スレッドの処理が終了し、通知を待つ前に通知が通過する機会があるため、永遠に待機します。
その場合、一般的な解決策はフラグを使用することです。
mutex m;
condition_variable cv;
bool done = false;
thread t1([&cv,&done]{
// processing
...
done = true;
cv.notify_one();
});
...
unique_lock<std::mutex> lck(m);
cv.wait(lck, [&done]{return done;});
を使用する一般的な方法はフラグを使用してcondition_variable
いますか、それとも私の解釈が間違っていますか?