Rust Atomic是否有C++ wait()、notify_one()/notify_all()的等效实现?
Rust原子类型的wait/notify功能支持
Rust标准库中std::sync::atomic模块下的原子类型,确实内置了和C++20 std::atomic完全等价的wait/notify同步功能,这和你提到的“遵循C++20规则”的文档描述一致。
具体对应功能如下:
- 原子类型提供
wait方法:当原子值与传入的旧值匹配时,当前线程会进入阻塞状态,直到被其他线程通知或超时。 - 配套的通知方法包括
notify_one(唤醒任意一个等待该原子变量的线程)和notify_all(唤醒所有等待的线程)。
以下是一个极简的使用示例:
use std::sync::atomic::{AtomicBool, Ordering}; use std::thread; use std::time::Duration; fn main() { let flag = AtomicBool::new(false); // 启动等待线程 thread::spawn(move || { // 等待flag从false变为true flag.wait(false, Ordering::SeqCst); println!("Flag updated to true!"); }); // 主线程延迟后更新值并通知 thread::sleep(Duration::from_secs(1)); flag.store(true, Ordering::SeqCst); flag.notify_one(); }
这些方法的语义和C++20的对应实现完全对齐:
wait会原子性地完成值检查与休眠操作,避免无效的忙等;- 通知方法的唤醒逻辑和C++一致;
- 传入的内存序参数作用也和C++保持相同,用于控制线程间的内存可见性约束。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

