在下面的选项中,使用条件变量时是否有正确的方法来处理虚假唤醒?
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++ 中的条件变量相当陌生,我不确定我读到的一些代码是否处理虚假唤醒的情况。