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
,因此本示例将以内嵌方式正常运行。