boost::condition cond;
boost::mutex access;
void listener_thread()
{
boost::mutex::scoped_lock lock(access);
while (true) {
while (!condition_check_var) {
cond.wait(lock);
}
do_some_work();
}
}
/// ... Main thread ...
cond.notify_all();
check_work:
{
boost::mutex::scoped_lock lock(access);
function_relies_on_work_been_done();
}
これは適切な設計ですか?notify_all()
が返されたら、listener_thread はすでにロックを取得していると想定しても安全ですか? そして、check_work
ブロックが実行されるとき (それは と同じミューテックスをロックしているので)、いくつかの「作業」は?listener_thread()
によってすでに行われているでしょう。listener_thread()
そうでない場合、この種の動作を実現するための好ましい方法は何ですか?