首页 > 解决方案 > 当两个条件变量之一通知时,是否可以等待并返回?

问题描述

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正确方式等待的东西吗?我正在考虑解决这个问题的最简单方法。

我的想法是让第三个条件变量等待与其他条件相关的两个变量,但我不知道该怎么做。

标签: rustmutexcondition-variable

解决方案


创建第三个Condvar并记住每次通知前两个中的任何一个时都要通知它。

Condvar无论如何考虑使用一个。由于它们可以虚假唤醒,因此您已经需要检查“谓词”,即Mutex.


推荐阅读