我正在读这篇文章 来自A Williams的好博客:
http://www.justsoftwaresolutions.co.uk/threading/condition-variable-spurious-wakes.html
有一件事让我感到困惑: 当线程因为虚假唤醒而被唤醒时,它是否有锁定互斥锁?
boost::mutex::scoped_lock lock(the_mutex);
while(the_queue.empty())
{
the_condition_variable.wait(lock);
}
我想是的,因为否则调用.empty会不安全,但我不确定。
答案 0 :(得分:4)
是的,确实锁定了互斥锁。基本上,仅当线程在the_condition_variable.wait()
中被阻塞时,互斥锁才会被释放。无论是否是虚假唤醒,互斥锁都会锁定在您显示的代码中的其他位置。
来自boost::condition_variable::wait()
的{{3}}:
<强>后置条件:强>
lock
被当前主题锁定。