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.
spin
também possui uma implementação de mutex de ticket lock; equivalentes deRwLock
,Barrier
eOnce
destd::sync
; eLazy
para inicialização lazy ("preguiçosa").- O crate
once_cell
també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.