gpt4 book ai didi

c++ - 虚假唤醒和条件变量

转载 作者:搜寻专家 更新时间:2023-10-31 01:10:48 32 4
gpt4 key购买 nike

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

最佳答案

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

来自documentation对于 boost::condition_variable::wait():

Postcondition:

lock is locked by the current thread.

关于c++ - 虚假唤醒和条件变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15589945/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com