Struct OnceNonZeroUsize
pub struct OnceNonZeroUsize {
inner: AtomicUsize,
}Expand description
A thread-safe cell which can be written to only once.
Fields§
§inner: AtomicUsizeImplementations§
§impl OnceNonZeroUsize
impl OnceNonZeroUsize
pub const fn new() -> OnceNonZeroUsize
pub const fn new() -> OnceNonZeroUsize
Creates a new empty cell.
pub unsafe fn get_unchecked(&self) -> NonZero<usize>
pub unsafe fn get_unchecked(&self) -> NonZero<usize>
Get the reference to the underlying value, without checking if the cell is initialized.
§Safety
Caller must ensure that the cell is in initialized state, and that the contents are acquired by (synchronized to) this thread.
pub fn set(&self, value: NonZero<usize>) -> Result<(), ()>
pub fn set(&self, value: NonZero<usize>) -> Result<(), ()>
Sets the contents of this cell to value.
Returns Ok(()) if the cell was empty and Err(()) if it was
full.
pub fn get_or_init<F>(&self, f: F) -> NonZero<usize>
pub fn get_or_init<F>(&self, f: F) -> NonZero<usize>
Gets the contents of the cell, initializing it with f if the cell was
empty.
If several threads concurrently run get_or_init, more than one f can
be called. However, all threads will return the same value, produced by
some f.
pub fn get_or_try_init<F, E>(&self, f: F) -> Result<NonZero<usize>, E>
pub fn get_or_try_init<F, E>(&self, f: F) -> Result<NonZero<usize>, E>
Gets the contents of the cell, initializing it with f if
the cell was empty. If the cell was empty and f failed, an
error is returned.
If several threads concurrently run get_or_init, more than one f can
be called. However, all threads will return the same value, produced by
some f.