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
.