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()
?
如果不是,那么实现这种行为的首选方法是什么?