虚假唤醒和条件变量

时间:2013-03-23 17:36:51

标签: c++ boost-thread condition-variable

我正在读这篇文章 来自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会不安全,但我不确定。

1 个答案:

答案 0 :(得分:4)

是的,确实锁定了互斥锁。基本上,仅当线程在the_condition_variable.wait()中被阻塞时,互斥锁才会被释放。无论是否是虚假唤醒,互斥锁都会锁定在您显示的代码中的其他位置。

来自boost::condition_variable::wait()的{​​{3}}:

  

<强>后置条件:

     

lock被当前主题锁定。