src/bare-metal/useful-crates/spin.md
spinstd::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.
# // Copyright 2023 Google LLC
# // SPDX-License-Identifier: Apache-2.0
#
use spin::mutex::SpinMutex;
static COUNTER: SpinMutex<u32> = SpinMutex::new(0);
fn main() {
dbg!(COUNTER.lock());
*COUNTER.lock() += 2;
dbg!(COUNTER.lock());
}
spin also has a ticket lock mutex implementation; equivalents of RwLock,
Barrier and Once from std::sync; and Lazy for lazy initialization.once_cell crate also has some useful types for late initialization
with a slightly different approach to spin::once::Once.spin, so this example will run fine inline.