[−][src]Struct fast_async_mutex::mutex_ordered::OrderedMutex
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]
Notable traits for OrderedMutexGuardFuture<'a, T>
impl<'a, T: ?Sized> Future for OrderedMutexGuardFuture<'a, T> type Output = OrderedMutexGuard<'a, 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); }
pub fn lock_owned(self: &Arc<Self>) -> OrderedMutexOwnedGuardFuture<T>ⓘNotable traits for OrderedMutexOwnedGuardFuture<T>
impl<T: ?Sized> Future for OrderedMutexOwnedGuardFuture<T> type Output = OrderedMutexOwnedGuard<T>;
[src]
Notable traits for OrderedMutexOwnedGuardFuture<T>
impl<T: ?Sized> Future for OrderedMutexOwnedGuardFuture<T> type Output = OrderedMutexOwnedGuard<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
impl<T: Debug + ?Sized> Debug for OrderedMutex<T>
[src]
impl<T: ?Sized> Send for OrderedMutex<T> where
T: Send,
[src]
T: Send,
impl<T: ?Sized> Sync for OrderedMutex<T> where
T: Send + Sync,
[src]
T: Send + Sync,
Auto Trait Implementations
impl<T> !RefUnwindSafe for OrderedMutex<T>
impl<T: ?Sized> Unpin for OrderedMutex<T> where
T: Unpin,
T: Unpin,
impl<T: ?Sized> UnwindSafe for OrderedMutex<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,