小编ImA*_*ser的帖子

一般来说,处理虚假唤醒的正确方法是什么?

在下面的选项中,使用条件变量时是否有正确的方法来处理虚假唤醒?

1)使用布尔值将wait(unique_lock_ul)放入无限循环while

unique_lock<mutex> ul(m); 
while(!full)
  cv.wait(ul);
Run Code Online (Sandbox Code Playgroud)

2) 与 if 相同

unique_lock<mutex> ul(m); 
if(!full)
  cv.wait(ul);
Run Code Online (Sandbox Code Playgroud)

3) 在 中放置一个条件wait(),例如使用 lambda 函数

unique_lock<mutex> ul(m); 
cv.wait(ul, [&](){return !full;});
Run Code Online (Sandbox Code Playgroud)

如果这些都不正确,那么如何轻松处理虚假唤醒呢?

我对 C++ 中的条件变量相当陌生,我不确定我读到的一些代码是否处理虚假唤醒的情况。

c++ condition-variable c++11 spurious-wakeup

4
推荐指数
1
解决办法
4936
查看次数

标签 统计

c++ ×1

c++11 ×1

condition-variable ×1

spurious-wakeup ×1