2

我正在阅读 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 将是不安全的,但我不确定。

4

1 回答 1

4

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

文档boost::condition_variable::wait()

后置条件:

lock被当前线程锁定。

于 2013-03-23T17:45:41.360 回答