libc_core/futex.rs
1//! This module provides the `libc` types for FUTEX (fast user-space mutex).
2use num_enum::TryFromPrimitive;
3
4/// Futex 操作类型枚举
5///
6/// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/src/internal/futex.h#L4>
7#[derive(Debug, TryFromPrimitive)]
8#[repr(usize)]
9pub enum FutexFlags {
10 /// 等待操作,线程阻塞直到被唤醒
11 Wait = 0,
12 /// 唤醒等待的线程
13 Wake = 1,
14 /// 使用文件描述符的 Futex 操作(较少用)
15 Fd = 2,
16 /// 将等待队列中的线程重新排队到另一个 Futex
17 Requeue = 3,
18 /// 带比较操作的重新排队,只有在值匹配时才执行排队
19 CmpRequeue = 4,
20 /// 执行复杂的唤醒和重新排队组合操作
21 WakeOp = 5,
22 /// 获取 Priority Inheritance 锁
23 LockPi = 6,
24 /// 释放 Priority Inheritance 锁
25 UnlockPi = 7,
26 /// 尝试获取 Priority Inheritance 锁(非阻塞)
27 TrylockPi = 8,
28 /// 等待指定的位集合(bitset),类似于 Wait,但支持位掩码
29 WaitBitset = 9,
30}
31
32/// 标志:表示 futex 是私有的,只在同一进程内使用(性能更好)
33/// 相当于 FUTEX_PRIVATE_FLAG,避免跨进程同步开销
34pub const FUTEX_PRIVATE: usize = 128;
35
36/// 标志:使用系统实时时钟(CLOCK_REALTIME)作为超时基准
37/// 默认 futex 超时使用的是 CLOCK_MONOTONIC,设置此标志改为使用实时时钟
38pub const FUTEX_CLOCK_REALTIME: usize = 256;