c++ - 在 while 循环中使用 std::condition_variable::wait 是否正确?
问题描述
我目前正在研究 std::condition_variable。在 while 循环中使用 std::condition_variable::wait() 而根本不依赖 std::condition_variable::notify() 是否正确?
每个 std::condition_variable::wait() 是否应该强制具有 std::condition_variable::notify() ?
解决方案
您在循环中使用它,并且依赖notify()
.
问题是条件变量被允许“虚假地”唤醒,也就是说,没有发出信号。这使得它更容易实现,但它要求你检查你是否真的在你认为的位置。所以你写了一个循环:
std::unique_lock<std::mutex> lk(some_mutex);
while (condition_not_satisfied())
cond_var.wait(lk);
Wheresome_mutex
为条件中使用的变量提供了一个关键区域。
或者,正如 Slava 指出的那样,您可以使用谓词版本:
std::unique_lock<std::mutex> lk(some_mutex);
cond_var.wait(lk, some_callable_object_that_checks_the_predicate);
(我从来不喜欢那种形式,所以我倾向于忘记它)
推荐阅读
- c++ - 请帮我看看为什么我会出错?
- kubernetes - openshift 构建配置触发器
- javascript - 在我的程序中有一个我无法检测到的错误
- r - 如何使用网格的功能将 y 轴标题放在图形的左上角?
- python - 使用 mpegtsmux Gtsreamer 混合视频 H264 和数据
- java - 如何创建一个方法来比较不同实例对象的属性值与java
- docker - docker compose 之后的 docker commit
- amazon-web-services - 如何从 CI/CD 管道向 AWS EKS 集群验证 kubectl
- swift - 来自 .accentColor swiftui 的 getHue 始终返回蓝色 hsb 值
- botframework - 具有输入验证的自适应卡片