# Module once_cell::race

source · [−]
Expand description

Thread-safe, non-blocking, “first one wins” flavor of `OnceCell`.

If two threads race to initialize a type from the `race` module, they don’t block, execute initialization function together, but only one of them stores the result.

This module does not require `std` feature.

## Atomic orderings

All types in this module use `Acquire` and `Release` atomic orderings for all their operations. While this is not strictly necessary for types other than `OnceBox`, it is useful for users as it allows them to be certain that after `get` or `get_or_init` returns on one thread, any side-effects caused by the setter thread prior to them calling `set` or `get_or_init` will be made visible to that thread; without it, it’s possible for it to appear as if they haven’t happened yet from the getter thread’s perspective. This is an acceptable tradeoff to make since `Acquire` and `Release` have very little performance overhead on most architectures versus `Relaxed`.

## Structs

OnceBool

A thread-safe cell which can be written to only once.

OnceBox

A thread-safe cell which can be written to only once.

OnceNonZeroUsize

A thread-safe cell which can be written to only once.

OnceRef

A thread-safe cell which can be written to only once.