You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:03:14