mirror of
https://github.com/rcore-os/rCore.git
synced 2024-11-24 00:46:17 +04:00
61 lines
1.5 KiB
Rust
61 lines
1.5 KiB
Rust
//! Useful synchronization primitives.
|
||
//!
|
||
//! 用于内核的同步互斥工具。
|
||
//!
|
||
//! 提供和`std::sync`相同的接口,具体用法可参考std官方文档。
|
||
//!
|
||
//! # 模块简介
|
||
//!
|
||
//! * `mutex`: 互斥锁。
|
||
//! 参考`spin::Mutex`实现了一套可替换底层支持的锁框架,在此基础上实现了三种锁:
|
||
//! 自旋锁,禁用中断自旋锁,线程调度锁
|
||
//!
|
||
//! * `condvar`: 条件变量。
|
||
//! 依赖`thread`,为其它工具提供线程调度支持。
|
||
//!
|
||
//! * `semaphore`: 信号量。
|
||
//! 完全照搬`std::sync::Semaphore`,std中已经废弃。
|
||
//! 貌似在Rust中并不常用,一般都用`Mutex`。
|
||
//!
|
||
//! * `mpsc`: 消息传递通道。
|
||
//! 多生产者-单消费者的FIFO队列。用于在线程间传递数据。
|
||
//!
|
||
//! * `test`: 测试。
|
||
//! 目前分别用`Mutex`和`Condvar`(Monitor)实现了哲学家就餐问题。
|
||
//!
|
||
//!
|
||
//! # 模块依赖关系图
|
||
//!
|
||
//! ```mermaid
|
||
//! graph TB
|
||
//! subgraph dependence
|
||
//! interrupt
|
||
//! thread
|
||
//! end
|
||
//! subgraph sync
|
||
//! SpinLock --> interrupt
|
||
//! Condvar --> SpinLock
|
||
//! Condvar --> thread
|
||
//! Mutex --> Condvar
|
||
//! Monitor --> Condvar
|
||
//! Semaphore --> Condvar
|
||
//! Semaphore --> SpinLock
|
||
//! mpsc --> SpinLock
|
||
//! mpsc --> Condvar
|
||
//! end
|
||
//! subgraph test
|
||
//! Dining_Philosophers --> Mutex
|
||
//! Dining_Philosophers --> Monitor
|
||
//! end
|
||
//! ```
|
||
|
||
pub use self::condvar::*;
|
||
pub use self::mutex::*;
|
||
pub use self::semaphore::*;
|
||
|
||
mod mutex;
|
||
mod condvar;
|
||
mod semaphore;
|
||
pub mod mpsc;
|
||
pub mod test;
|