rust - 当两个条件变量之一通知时,是否可以等待并返回?
问题描述
Rust 中的用法Condvar
是这样的:
let pair = Arc::new((Mutex::new(true), Condvar::new()));
//...
let (lock, cvar) = &*pair;
let _guard = cvar.wait_while(lock.lock().unwrap(), SOMETHING_HERE).unwrap();
有什么我可以放入以SOMETHING_HERE
正确方式等待的东西吗?我正在考虑解决这个问题的最简单方法。
我的想法是让第三个条件变量等待与其他条件相关的两个变量,但我不知道该怎么做。
解决方案
创建第三个Condvar
并记住每次通知前两个中的任何一个时都要通知它。
Condvar
无论如何考虑使用一个。由于它们可以虚假唤醒,因此您已经需要检查“谓词”,即Mutex
.
推荐阅读
- php - OctoberCMS - 使用图表或记分牌报告我的预订
- azure - 动态 IP 无法使用 Azure 反向 DNS?
- node.js - 如何通过单击浏览器中的后退按钮来修复用户对授权页面的访问
- .htaccess - 在 .htaccess 中强制使用 HTTPS 并避免 302 重定向
- html - 如何将普通 CSS 应用于 Angular 组件
- bootstrap-4 - Bootstrap 4.5 - 折叠不起作用,安装了 jQuery 和所有 CDN 包
- php - 如何在 PHP 中将 3 维数组转换为 2 维数组?
- bash - Bash:找不到打印命令
- javascript - antd中如何改变动态表单域的值?
- javascript - 从回调 API 调用异步代码安全吗?