【问题标题】:Spurios wake up and condition variables虚假唤醒和条件变量
【发布时间】:2013-03-23 17:36:50
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    是的,它确实锁定了互斥锁。基本上,只有当线程在the_condition_variable.wait() 中被阻塞时,互斥锁才会被释放。不管是否是虚假唤醒,互斥锁在您显示的代码中的其他任何地方都被锁定。

    documentationboost::condition_variable::wait()

    后置条件:

    lock被当前线程锁定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      相关资源
      最近更新 更多