Struct OrderedMutex

Source
pub struct OrderedMutex<T: ?Sized> { /* private fields */ }
Expand description

The Ordered Mutex has its mechanism of locking order when you have concurrent access to data. It will work well when you needed step by step data locking like sending UDP packages in a specific order.

The main difference with the standard Mutex is ordered mutex will check an ordering of blocking. This way has some guaranties of mutex execution order, but it’s a little bit slowly than original mutex.

Implementations§

Source§

impl<T> OrderedMutex<T>

Source

pub const fn new(data: T) -> OrderedMutex<T>

Create a new OrderedMutex

Source§

impl<T: ?Sized> OrderedMutex<T>

Source

pub fn lock(&self) -> OrderedMutexGuardFuture<'_, T>

Acquires the mutex.

Returns a guard that releases the mutex and wake the next locker when dropped.

§Examples
use fast_async_mutex::mutex_ordered::OrderedMutex;

#[tokio::main]
async fn main() {
    let mutex = OrderedMutex::new(10);
    let guard = mutex.lock().await;
    assert_eq!(*guard, 10);
}
Source

pub fn lock_owned(self: &Arc<Self>) -> OrderedMutexOwnedGuardFuture<T>

Acquires the mutex.

Returns a guard that releases the mutex and wake the next locker when dropped. OrderedMutexOwnedGuard have a 'static lifetime, but requires the Arc<OrderedMutex<T>> type

§Examples
use fast_async_mutex::mutex_ordered::OrderedMutex;
use std::sync::Arc;
#[tokio::main]
async fn main() {
    let mutex = Arc::new(OrderedMutex::new(10));
    let guard = mutex.lock_owned().await;
    assert_eq!(*guard, 10);
}

Trait Implementations§

Source§

impl<T: Debug + ?Sized> Debug for OrderedMutex<T>

Source§

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

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

impl<T> Send for OrderedMutex<T>
where T: Send + ?Sized,

Source§

impl<T> Sync for OrderedMutex<T>
where T: Send + Sync + ?Sized,

Auto Trait Implementations§

§

impl<T> !Freeze for OrderedMutex<T>

§

impl<T> !RefUnwindSafe for OrderedMutex<T>

§

impl<T> Unpin for OrderedMutex<T>
where T: Unpin + ?Sized,

§

impl<T> UnwindSafe for OrderedMutex<T>
where T: UnwindSafe + ?Sized,

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.