spin
std::sync::Mutex e os outros primitivos de sincronização de std::sync não estão disponíveis em core ou alloc. Como podemos gerenciar a sincronização ou mutabilidade interna, como para compartilhar estado entre diferentes CPUs?
O crate spin fornece equivalentes baseados em spinlock para muitos dessas primitivas.
use spin::mutex::SpinMutex; static counter: SpinMutex<u32> = SpinMutex::new(0); fn main() { println!("count: {}", counter.lock()); *counter.lock() += 2; println!("count: {}", counter.lock()); }
- Tome cuidado para evitar deadlock se você tomar locks em manipuladores de interrupção.
spintambém possui uma implementação de mutex de ticket lock; equivalentes deRwLock,BarriereOncedestd::sync; eLazypara inicialização lazy (“preguiçosa”).- O crate
once_celltambém possui alguns tipos úteis para inicialização tardia com uma abordagem um pouco diferente despin::once::Once. - O Rust Playground inclui
spin, portanto, este exemplo será executado corretamente inline.