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_cell
Crate 也具備一些實用型別,適合用於晚期初始化,與spin::once::Once
的做法略有不同。- Rust Playground 包含
spin
,因此這個範例可在行內執行。