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

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