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 also has a ticket lock mutex implementation; equivalents of RwLock, Barrier and Once from std::sync; and Lazy for lazy initialisation.
  • El crate once_cell también tiene algunos tipos útiles de inicialización tardía con un enfoque ligeramente distinto al de spin::once::Once.
  • El playground de Rust incluye spin, por lo que este ejemplo se ejecutará bien aunque está insertado.