os/kernel/task/
futex.rs

1//! Futex 相关功能
2
3use hashbrown::HashMap;
4
5use crate::{kernel::WaitQueue, sync::SpinLock};
6
7lazy_static::lazy_static! {
8    /// 全局 Futex 管理器实例
9    pub static ref FUTEX_MANAGER: SpinLock<FutexManager> = SpinLock::new(FutexManager::new());
10}
11
12/// Futex 管理器,负责管理所有的 Futex 对象
13pub struct FutexManager {
14    futexes: HashMap<usize, WaitQueue>,
15}
16
17impl FutexManager {
18    /// 创建一个新的 Futex 管理器实例
19    pub fn new() -> Self {
20        Self {
21            futexes: HashMap::new(),
22        }
23    }
24
25    /// 根据用户空间地址获取对应的 Futex 等待队列
26    pub fn get_wait_queue(&mut self, uaddr: usize) -> &mut WaitQueue {
27        self.futexes.entry(uaddr).or_insert_with(WaitQueue::new)
28    }
29}