忽略虚假唤醒,condition_variable::wait_for
Ignore spurious wakeups, condition_variable::wait_for
文档指出,可以使用谓词的第二个重载来避免虚假唤醒。我没有看到,我如何修改我的代码以确保wait_fo不会被错误地唤醒?
while(count_ > 0) {
if (condition_.wait_for(lock, std::chrono::milliseconds(timeOut_)) ==
std::cv_status::timeout)
break;
}
文档具有误导性:可能存在sprios唤醒,但带有谓词的wait_for()
只有在谓词为true
时才会返回。也就是说,当使用谓词版本时,它看起来好像没有虚假的唤醒。您可以通过记录谓词执行的频率来检测是否存在虚假唤醒。
你会像一样使用它
if (condition_.wait_for(lock,
std::chrono::milliseconds(timeOut_),
[&](){ return count_ <= 0; }) ==
std::cv_status::timeout) {
// deal with timeout here
}
相关文章:
- std::condition_variable::wait()如何评估给定的谓词
- C++ Singleton - Prevent ::instance() to variable
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- std::memory_order for std::atomic:<T>:wait
- 如何通过多类"Union variable" (sfml) 使用轮询事件
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- std::p romise::set_value() 和 std::future::wait() 是否提供内存围栏?
- 为什么我会收到"Run-Time Check Failure #2 - Stack around the variable 'pr' was corrupted"错误?
- C++:寻找"returning address of local variable..."的更正
- C++ - 在我尝试制作一个简单的计算器时有一个"uninitialized local variable y used"警告
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- Visual Studio Code "variable " u8 的 C/C++ 扩展名 " " 不是类型名称"
- C++ "Using Uninitialized Memory.. (variable name) "
- cudaMallocManaged for host-initiated variable
- Cppcheck "Reference to auto variable returned"失败的原因?
- std::future::get()或std::future::wait()是std::thread::join()的替
- OpenCV 和 C++:"Can't resolve variable 'Mat`"
- 是否有用于"go to variable type definition" C++中"auto"变量的 Visual Studio 键盘快捷方式?
- 冲刺错误"variable may be unsafe" (C4996)...选择?
- Visual Studio生成"Error: uninitialized local variable 'x' "而在线编译器不会 - 为什么?