Crate atomic_once_cell
source · [−]Expand description
atomic_once_cell provides two new types, AtomicOnceCell and
AtomicLazy, which are thread-safe and lock-free versions of
core::lazy::OnceCell and core::lazy::Lazy suitable for use
in #[no_std] environments.
Blocking
Both types can be used in a non-blocking way, but there are some
blocking calls that should not be used from interrupt handlers or
other contexts where blocking will lead to a deadlock. Blocking is
based on
crossbeam::utils::Backoff,
and will be reduced to a spin lock in #[no_std] environments.
Examples
AtomicOnceCell
use atomic_once_cell::AtomicOnceCell;
static CELL: AtomicOnceCell<String> = AtomicOnceCell::new();
fn main() {
CELL.set("Hello, World!".to_owned()).unwrap();
assert_eq!(*CELL.get().unwrap(), "Hello, World!");
}AtomicLazy
use atomic_once_cell::AtomicLazy;
static LAZY: AtomicLazy<String> = AtomicLazy::new(|| "Hello, World!".to_owned());
fn main() {
assert_eq!(*LAZY, "Hello, World!");
}Structs
A thread-safe value which is initialized on the first access.
A thread-safe cell which can be written to only once.