Struct diatomic_waker::DiatomicWaker

source ·
pub struct DiatomicWaker { /* private fields */ }
Expand description

A primitive that can send or await notifications.

It is almost always preferable to use the WakeSink and WakeSource which offer more convenience at the cost of an allocation in an Arc.

If allocation is not possible or desirable, the sink_ref method can be used to create a WakeSinkRef handle and one or more WakeSourceRefs, the non-owned counterparts to WakeSink and WakeSource.

Finally, DiatomicWaker exposes unsafe methods that can be used to create custom synchronization primitives.

Implementations§

source§

impl DiatomicWaker

source

pub const fn new() -> Self

Available on non-diatomic_waker_loom only.

Creates a new DiatomicWaker.

source

pub fn sink_ref(&mut self) -> WakeSinkRef<'_>

Returns a sink with a lifetime bound to this DiatomicWaker.

This mutably borrows the waker, thus ensuring that at most one associated sink can be active at a time.

source

pub fn notify(&self)

Sends a notification if a waker is registered.

This automatically unregisters any waker that may have been previously registered.

source

pub unsafe fn register(&self, waker: &Waker)

Registers a new waker.

Registration is lazy: the waker is cloned only if it differs from the last registered waker (note that the last registered waker is cached even if it was unregistered).

§Safety

The register, unregister and wait_until methods cannot be used concurrently from multiple threads.

source

pub unsafe fn unregister(&self)

Unregisters the waker.

After the waker is unregistered, subsequent calls to notify will be ignored.

Note that the previously-registered waker (if any) remains cached.

§Safety

The register, unregister and wait_until methods cannot be used concurrently from multiple threads.

source

pub unsafe fn wait_until<P, T>(&self, predicate: P) -> WaitUntil<'_, P, T>
where P: FnMut() -> Option<T>,

Returns a future that can be awaited until the provided predicate returns a value.

The predicate is checked each time a notification is received.

§Safety

The register, unregister and wait_until methods cannot be used concurrently from multiple threads.

Trait Implementations§

source§

impl Debug for DiatomicWaker

source§

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

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

impl Default for DiatomicWaker

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl Send for DiatomicWaker

source§

impl Sync for DiatomicWaker

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.