// A "once" is a relatively simple primitive, and it's also typically provided // by the OS as well (see `pthread_once` or `InitOnceExecuteOnce`). The OS // primitives, however, tend to have surprising restrictions, such as the Unix // one doesn't allow an argument to be passed to the function. // // As a result, we end up implementing it ourselves in the standard library. // This also gives us the opportunity to optimize the implementation a bit which // should help the fast path on call sites. cfg_if::cfg_if! { if #[cfg(any( target_os = "linux", target_os = "android", all(target_arch = "wasm32", target_feature = "atomics"), target_os = "freebsd", target_os = "openbsd", target_os = "dragonfly", target_os = "fuchsia", target_os = "hermit", ))] { mod futex; pub use futex::{Once, OnceState}; } else if #[cfg(any( windows, target_family = "unix", all(target_vendor = "fortanix", target_env = "sgx"), target_os = "solid_asp3", ))] { mod queue; pub use queue::{Once, OnceState}; } else { pub use crate::sys::once::{Once, OnceState}; } }