如果 std::condition_variable
可以由于虚假唤醒而发出信号(并且我们不能确定我们需要的条件是否真的得到满足),为什么 C++ 标准库提供重载没有谓词的 wait()
方法?什么场景可以使用这种行为?
最佳答案
假设一个复杂条件:A || B
。当条件的任何部分为真时,应执行适当的操作,actionA
或 actionB
。
使用predicate版本,代码如下:
cond.wait(lock, []{return (A || B);});
if(A) {
actionA();
}
else {
actionB();
}
但如果使用非谓词等待,代码可能更快:
while(true)
{
if(A) {
actionA();
break;
}
else if(B) {
actionB();
break;
}
cond.wait(lock);
}
请注意,与第一个变体不同,现在每个条件部分都被评估一次。
还有更复杂的情况,条件不能写在单个表达式中。
关于c++ - 什么时候可以在没有谓词的情况下使用 std::condition_variable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35012826/