spin
std::sync::Mutex 和其他來自 std::sync 的同步基元,都無法用於 core 或 alloc。我們能如何管理同步處理作業或內部可變動性 (例如為了在不同 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也具備排號自旋鎖互斥實作項目;std::sync中RwLock、Barrier和Once的同等項目;以及用於延遲初始化的Lazy。once_cellCrate 也具備一些實用型別,適合用於晚期初始化,與spin::once::Once的做法略有不同。- Rust Playground 包含
spin,因此這個範例可在行內執行。