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.
spinalso has a ticket lock mutex implementation; equivalents ofRwLock,BarrierandOncefromstd::sync; andLazyfor lazy initialisation.- El crate
once_celltambié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.