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