spin
std::sync::Mutex
y el resto de los primitivos de sincronización de std::sync
no están disponibles en core
o alloc
. ¿Cómo podemos gestionar la sincronización o la mutabilidad interior para, por ejemplo, compartir el estado entre diferentes CPUs?
El crate spin
proporciona equivalentes basados en spinlocks de muchos de estos primitivos.
use spin::mutex::SpinMutex; static counter: SpinMutex<u32> = SpinMutex::new(0); fn main() { println!("count: {}", counter.lock()); *counter.lock() += 2; println!("count: {}", counter.lock()); }
- Intenta evitar interbloqueos si usas bloqueos en los controladores de las interrupciones.
spin
también cuenta con una implementación de exclusión mutua de bloqueo de tickets; equivalentes deRwLock
,Barrier
yOnce
destd::sync
, yLazy
para inicialización perezosa- El crate
once_cell
también tiene algunos tipos útiles de inicialización tardía con un enfoque ligeramente distinto al despin::once::Once
. - El playground de Rust incluye
spin
, por lo que este ejemplo se ejecutará bien aunque está insertado.