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>
impl<T> OrderedMutex<T>
Sourcepub const fn new(data: T) -> OrderedMutex<T>
pub const fn new(data: T) -> OrderedMutex<T>
Create a new OrderedMutex
Source§impl<T: ?Sized> OrderedMutex<T>
impl<T: ?Sized> OrderedMutex<T>
Sourcepub fn lock(&self) -> OrderedMutexGuardFuture<'_, T> ⓘ
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);
}
Sourcepub fn lock_owned(self: &Arc<Self>) -> OrderedMutexOwnedGuardFuture<T> ⓘ
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§
impl<T> Send for OrderedMutex<T>
impl<T> Sync for OrderedMutex<T>
Auto Trait Implementations§
impl<T> !Freeze for OrderedMutex<T>
impl<T> !RefUnwindSafe for OrderedMutex<T>
impl<T> Unpin for OrderedMutex<T>
impl<T> UnwindSafe for OrderedMutex<T>where
T: UnwindSafe + ?Sized,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more