[英]How does condition_variable::wait_for() deal with spurious wakeups?
[英]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.