[][src]Struct fast_async_mutex::mutex_ordered::OrderedMutex

pub struct OrderedMutex<T: ?Sized> { /* fields omitted */ }

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

impl<T> OrderedMutex<T>[src]

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

Create a new OrderedMutex

impl<T: ?Sized> OrderedMutex<T>[src]

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

Notable traits for OrderedMutexGuardFuture<'a, T>

impl<'a, T: ?Sized> Future for OrderedMutexGuardFuture<'a, T> type Output = OrderedMutexGuard<'a, T>;
[src]

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);
}

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

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

impl<T: Debug + ?Sized> Debug for OrderedMutex<T>[src]

impl<T: ?Sized> Send for OrderedMutex<T> where
    T: Send
[src]

impl<T: ?Sized> Sync for OrderedMutex<T> where
    T: Send + Sync
[src]

Auto Trait Implementations

impl<T> !RefUnwindSafe for OrderedMutex<T>

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

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

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.