DispatchOnce

Struct DispatchOnce 

Source
pub struct DispatchOnce { /* private fields */ }
Expand description

A low-level synchronization primitive for one-time global execution.

This is equivalent to std::sync::Once, except that this uses the underlying system primitives from libdispatch, which:

  • Might result in less code-size overhead.
  • Aborts on panics in the initialization closure.

Generally, prefer std::sync::Once unless you have a specific need for this.

§Example

Run a closure once for the duration of the entire program, without using std::sync::Once.

use dispatch2::DispatchOnce;

static INIT: DispatchOnce = DispatchOnce::new();

INIT.call_once(|| {
    // run initialization here
});

Implementations§

Source§

impl DispatchOnce

Source

pub unsafe fn once_with_block( predicate: NonNull<dispatch_once_t>, block: dispatch_block_t, )

Source

pub unsafe fn once_f( predicate: NonNull<dispatch_once_t>, context: *mut c_void, function: dispatch_function_t, )

Source§

impl DispatchOnce

Source

pub const fn new() -> Self

Creates a new DispatchOnce.

Source

pub fn call_once<F>(&self, work: F)
where F: FnOnce(),

Executes a closure once for the lifetime of the application.

If called simultaneously from multiple threads, this function waits synchronously until the work function has completed.

§Aborts

The process will trap or abort if:

  • The given initialization closure unwinds.
  • The given closure recursively invokes call_once on the same DispatchOnce instance.

Trait Implementations§

Source§

impl Debug for DispatchOnce

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl RefUnwindSafe for DispatchOnce

Source§

impl Send for DispatchOnce

Source§

impl Sync for DispatchOnce

Source§

impl UnwindSafe for DispatchOnce

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> AutoreleaseSafe for T
where T: ?Sized,