spin
std::sync::Mutex and the other synchronisation primitives from std::sync are not available in core or alloc. How can we manage synchronisation or interior mutability, such as for sharing state between different CPUs?
The spin crate provides spinlock-based equivalents of many of these primitives.
use spin::mutex::SpinMutex;static counter: SpinMutex<u32> = SpinMutex::new(0);fn main() {println!("count: {}", counter.lock());*counter.lock() += 2;println!("count: {}", counter.lock());}
- Be careful to avoid deadlock if you take locks in interrupt handlers.
spinalso has a ticket lock mutex implementation; equivalents ofRwLock,BarrierandOncefromstd::sync; andLazyfor lazy initialisation.- The once_cell crate also has some useful types for late initialisation with a slightly different approach to
spin::once::Once. - The Rust Playground includes
spin, so this example will run fine inline.