spin
std::sync::Mutex та інші примітиви синхронізації з std::sync недоступні в core або alloc. Як ми можемо керувати синхронізацією або внутрішньою мутабельністю, наприклад, для обміну станом між різними CPU?
Крейт spin надає еквіваленти багатьох із цих примітивів на основі спін-блокування.
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також має реалізацію квиткового м’ютексу блокування; еквівалентиRwLock,BarrierіOnceзstd::sync; іLazyдля ледачої ініціалізації.- Крейт 
once_cellтакож має кілька корисних типів для пізньої ініціалізації з дещо іншим підходом доspin::once::Once. - Rust Playground містить 
spin, тож цей приклад добре працюватиме вбудовано.