LockedExclusive

Struct LockedExclusive 

Source
pub struct LockedExclusive<'wait_list, L: Lock, I, O> {
    pub guard: <L as Lifetime<'wait_list>>::ExclusiveGuard,
    /* private fields */
}
Expand description

An exclusive lock on a WaitList, created by WaitList::lock_exclusive.

Fields§

§guard: <L as Lifetime<'wait_list>>::ExclusiveGuard

The lock guard holding the lock on the WaitList.

You can use this field to access whatever auxiliary locked state you have associated with the WaitList.

Implementations§

Source§

impl<'wait_list, L: Lock, I, O> LockedExclusive<'wait_list, L, I, O>

Source

pub fn head_input_mut(&mut self) -> Option<&mut I>

Retrieve a unique reference to the input given by the head entry in the list, if there is one.

Source

pub fn init_and_wait<OnCancel>( self, input: I, on_cancel: OnCancel, ) -> InitAndWait<'wait_list, L, I, O, OnCancel>
where OnCancel: CancelCallback<'wait_list, L, I, O>,

Wait on the list for someone to call Self::wake_one.

This method takes ownership of self so that the lock can be released while the future is suspended. At the end, ownership of the lock guard is transferred back to the caller.

A callback must be supplied to call in the event that the future has been woken but was cancelled before it could complete. You will often want to re-call Self::wake_one in this case to pass on the notification to someone else.

Note that the returned future will not be Send if your guard types are !Send. To avoid this problem, use the lower-level Wait API instead.

Source

pub fn pop(&mut self, output: O) -> Result<(I, Waker), O>

Pop the first waiter from the front of the queue, if there is one.

Returns ownership of that waiter’s input value and the waker that can be used to wake it.

It is recommended to only wake the waker when the lock guard is not held, because waking the waker may attempt to drop the future (if for example the runtime is shutting down) which would deadlock if the future is registered in WaitList.

§Errors

Returns an error and gives back the given output when there are no wakers in the list.

Source

pub fn wake_one(self, output: O) -> Result<I, O>

Wake and dequeue the first waiter in the queue, if there is one.

Returns ownership of that waiter’s input value.

This method consumes self so we can ensure that the lock guard is freed before calling wake on the waker, to prevent deadlocks.

§Errors

Returns an error and gives back the given output when there are no wakers in the list.

Methods from Deref<Target = LockedCommon<'wait_list, L, I, O>>§

Source

pub fn is_empty(&self) -> bool

Check whether there are any futures waiting in this list.

Source

pub fn head_input(&self) -> Option<&I>

Retrieve a shared reference to the input given by the head entry in the list, if there is one.

Trait Implementations§

Source§

impl<'wait_list, L: Lock + Debug, I, O> Debug for LockedExclusive<'wait_list, L, I, O>
where <L as Lifetime<'wait_list>>::ExclusiveGuard: Debug,

Source§

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

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

impl<'wait_list, L: Lock, I, O> Deref for LockedExclusive<'wait_list, L, I, O>

Source§

type Target = LockedCommon<'wait_list, L, I, O>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<'wait_list, L, I, O> Freeze for LockedExclusive<'wait_list, L, I, O>
where <L as Lifetime<'wait_list>>::ExclusiveGuard: Freeze,

§

impl<'wait_list, L, I, O> !RefUnwindSafe for LockedExclusive<'wait_list, L, I, O>

§

impl<'wait_list, L, I, O> Send for LockedExclusive<'wait_list, L, I, O>
where <L as Lifetime<'wait_list>>::ExclusiveGuard: Send, L: Sync, I: Send + Sync, O: Send,

§

impl<'wait_list, L, I, O> Sync for LockedExclusive<'wait_list, L, I, O>
where <L as Lifetime<'wait_list>>::ExclusiveGuard: Sync, L: Sync, I: Send + Sync, O: Send,

§

impl<'wait_list, L, I, O> Unpin for LockedExclusive<'wait_list, L, I, O>
where <L as Lifetime<'wait_list>>::ExclusiveGuard: Unpin,

§

impl<'wait_list, L, I, O> !UnwindSafe for LockedExclusive<'wait_list, L, I, O>

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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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.