[−][src]Struct spin::once::Once
A primitive that provides lazy one-time initialization.
Unlike its std::sync
equivalent, this is generalized such that the closure returns a
value to be stored by the Once
(std::sync::Once
can be trivially emulated with
Once<()>
).
Because Once::new
is const
, this primitive may be used to safely initialize statics.
Examples
use spin; static START: spin::Once<()> = spin::Once::new(); START.call_once(|| { // run initialization here });
Implementations
impl<T> Once<T>
[src]
pub const INIT: Self
[src]
Initialization constant of Once
.
pub const fn new() -> Once<T>
[src]
Creates a new Once
.
pub const fn initialized(data: T) -> Once<T>
[src]
Creates a new initialized Once
.
pub fn call_once<F: FnOnce() -> T>(&self, f: F) -> &T
[src]
Performs an initialization routine once and only once. The given closure
will be executed if this is the first time call_once
has been called,
and otherwise the routine will not be invoked.
This method will block the calling thread if another initialization routine is currently running.
When this function returns, it is guaranteed that some initialization has run and completed (it may not be the closure specified). The returned pointer will point to the result from the closure that was run.
Panics
This function will panic if the Once
previously panicked while attempting
to initialize. This is similar to the poisoning behaviour of std::sync
's
primitives.
Examples
use spin; static INIT: spin::Once<usize> = spin::Once::new(); fn get_cached_val() -> usize { *INIT.call_once(expensive_computation) } fn expensive_computation() -> usize { // ... }
pub fn get(&self) -> Option<&T>
[src]
Returns a reference to the inner value if the Once
has been initialized.
pub fn get_mut(&mut self) -> Option<&mut T>
[src]
Returns a mutable reference to the inner value if the Once
has been initialized.
Because this method requires a mutable reference to the Once
, no synchronization
overhead is required to access the inner value. In effect, it is zero-cost.
pub fn try_into_inner(self) -> Option<T>
[src]
Returns a the inner value if the Once
has been initialized.
Because this method requires ownershup of the Once
, no synchronization overhead
is required to access the inner value. In effect, it is zero-cost.
pub fn is_completed(&self) -> bool
[src]
Returns a reference to the inner value if the Once
has been initialized.
pub fn wait(&self) -> &T
[src]
Spins until the Once
contains a value.
Note that in releases prior to 0.7
, this function had the behaviour of Once::poll
.
Panics
This function will panic if the Once
previously panicked while attempting
to initialize. This is similar to the poisoning behaviour of std::sync
's
primitives.
pub fn poll(&self) -> Option<&T>
[src]
Like Once::get
, but will spin if the Once
is in the process of being
initialized. If initialization has not even begun, None
will be returned.
Note that in releases prior to 0.7
, this function was named wait
.
Panics
This function will panic if the Once
previously panicked while attempting
to initialize. This is similar to the poisoning behaviour of std::sync
's
primitives.
Trait Implementations
impl<T: Debug> Debug for Once<T>
[src]
impl<T> From<T> for Once<T>
[src]
impl<T: Send> Send for Once<T>
[src]
impl<T: Send + Sync> Sync for Once<T>
[src]
Auto Trait Implementations
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<!> for T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,