5 个版本 (3 个稳定版)
1.1.0 | 2023年1月2日 |
---|---|
1.0.1 | 2022年9月27日 |
0.2.0 | 2022年9月25日 |
0.1.0 | 2022年9月16日 |
#211 在 并发 中
9,635 每月下载次数
在 10 crates 中使用
10KB
151 代码行
跨平台原子等待和唤醒(即 futex)功能。
此 crate 只支持在 Linux、FreeBSD、Windows 和 macOS 上都有的功能。也就是说
- 只支持
AtomicU32
。 (Linux 当前只支持 32 位 futexes。) - 只支持 "等待"、"唤醒一个" 和 "唤醒所有" 操作。 (Linux 支持更多操作,但 Windows 和 macOS 不支持。)
- 没有超时。 (macOS 没有稳定/公开的超时 API。)
- 唤醒操作不返回唤醒的线程数。 (只有 Linux 支持。)
支持的平台:Linux 2.6.22+、FreeBSD 11+、Windows 8+、Windows Server 2012+、macOS 11+、iOS 14+、watchOS 7+。
用法
use std::sync::atomic::AtomicU32;
use atomic_wait::{wait, wake_one, wake_all};
let a = AtomicU32::new(0);
wait(&a, 1); // If the value is 1, wait.
wake_one(&a); // Wake one waiting thread.
wake_all(&a); // Wake all waiting threads.
实现
在 Linux 上,这使用 SYS_futex
系统调用。
在 FreeBSD 上,这使用 _umtx_op
系统调用。
在 Windows 上,这使用 WaitOnAddress
和 WakeByAddress
API。
在 macOS(以及 iOS 和 watchOS)上,这使用 libc
,利用与 C++20 的 atomic_wait
和 atomic_notify
函数相同的(ABI 稳定)函数。
依赖关系
~0–13MB
~96K SLoC