spin
在 core 或 alloc 中无法使用 std::sync::Mutex 和 std::sync 中的其他同步基元。那么该如何管理同步或内部可变性,例如在不同 CPU 之间共享状态?
spin crate 为许多基元提供了基于自旋锁的等效方法。
use spin::mutex::SpinMutex; static counter: SpinMutex<u32> = SpinMutex::new(0); fn main() { println!("count: {}", counter.lock()); *counter.lock() += 2; println!("count: {}", counter.lock()); }
- 在中断处理程序中进行锁定操作时,请注意避免出现死锁的情况。
spinalso has a ticket lock mutex implementation; equivalents ofRwLock,BarrierandOncefromstd::sync; andLazyfor lazy initialisation.once_cellcrate 也提供了一些适用于延迟初始化的实用类型,它们与spin::once::Once所用方法略有不同。- Rust Playground 中包含
spin,因此本示例将以内嵌方式正常运行。