繁体   English   中英

忽略虚假唤醒,condition_variable :: wait_for

[英]Ignore spurious wakeups, condition_variable::wait_for

文档说谓词的第二次重载可用于避免虚假唤醒。 我没看到它,如何修改我的代码,以确保不会虚假地唤醒wait_for?

while(count_ > 0) {
    if (condition_.wait_for(lock, std::chrono::milliseconds(timeOut_)) ==
            std::cv_status::timeout)
        break;
}

该文档具有误导性:可能会有少量唤醒,但是带有谓词的wait_for()仅在谓词true时才返回。 也就是说,使用谓词版本时,似乎没有虚假的唤醒。 您可以通过记录谓词执行的频率来检测是否有虚假的唤醒。

你会用它像

if (condition_.wait_for(lock,
                        std::chrono::milliseconds(timeOut_),
                        [&](){ return count_ <= 0; }) ==
        std::cv_status::timeout) {
    // deal with timeout here
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM