gpt4 book ai didi

c++ - std::condition_variable_any 有尴尬的语义吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:14:05 26 4
gpt4 key购买 nike

使用 POSIX 条件变量,你可以这样写:

while (!_doneWaiting) {
wait(lock);
}

起初当我看到新的 C++11 风格时,我很兴奋:

unique_lock<recursive_mutex> g(_consumerCondLock);
_consumerCond.wait( g, [this]() {
return _doneWaiting;
} );

但是我遇到了一个烦恼:上面的谓词 lambda 是否保证在任何等待发生之前运行一次?

最佳答案

Is the predicate lambda above guaranteed to run once before any waiting occurs?

必须检查您等待的条件:

  1. 在等待条件变量之前。
  2. 因为spurious wakeups而等待条件变量之后.

这就是为什么等待条件变量的规范形式是 while 循环:

// lock the mutex
while(!condition)
// wait on the condition variable

这就是 std::condition_variable::wait 为您所做的。


请注意,大多数时候您需要 std::condition_variable 而不是 std::condition_variable_any。后者维护自己的互斥锁,并且在内存和运行时方面成本更高。

关于c++ - std::condition_variable_any 有尴尬的语义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24411856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com