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()); }
- 在中断处理程序中进行锁定操作时,请注意避免出现死锁的情况。
spin
also has a ticket lock mutex implementation; equivalents ofRwLock
,Barrier
andOnce
fromstd::sync
; andLazy
for lazy initialisation.once_cell
crate 也提供了一些适用于延迟初始化的实用类型,它们与spin::once::Once
所用方法略有不同。- Rust Playground 中包含
spin
,因此本示例将以内嵌方式正常运行。