[−]Struct sunrise_kernel::sync::Once
A synchronization primitive which can be used to run a one-time global initialization. Unlike its std equivalent, this is generalized so that the closure returns a value and it is stored. Once therefore acts something like a future, too.
Examples
use spin; static START: spin::Once<()> = spin::Once::new(); START.call_once(|| { // run initialization here });
Fields
state: AtomicUsize
data: UnsafeCell<Option<T>>
Implementations
impl<T> Once<T>
pub const INIT: Once<T>
Initialization constant of Once
.
pub fn new() -> Once<T>
Creates a new Once
value.
pub fn call_once<F>(&'a self, builder: F) -> &'a T where
F: FnOnce() -> T,
F: FnOnce() -> T,
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.
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 try(&'a self) -> Option<&'a T>
Returns a pointer iff the Once
was previously initialized
pub fn wait(&'a self) -> Option<&'a T>
Like try, but will spin if the Once
is in the process of being
initialized
Trait Implementations
impl<T> Debug for Once<T> where
T: Debug,
T: Debug,
impl<T> Send for Once<T> where
T: Send,
T: Send,
impl<T> Sync for Once<T> where
T: Send + Sync,
T: Send + Sync,
Auto Trait Implementations
impl<T> !RefUnwindSafe for Once<T>
impl<T> Unpin for Once<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for Once<T> where
T: UnwindSafe,
T: UnwindSafe,
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<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>,