[][src]Struct fast_async_mutex::rwlock_ordered::OrderedRwLock

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

The Ordered RW Lock will be locking all reads, which starting after write and unlocking them only when write will realize. It may be slow down the reads speed, but decrease time to write on systems, where it is critical.

BUT RW Lock has some limitations. You should avoid acquiring the second reading before realizing first inside the one future. Because it can happen that between your readings a write from another thread will acquire the mutex, and you will get a deadlock.

Implementations

impl<T> OrderedRwLock<T>[src]

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

Create a new OrderedRWLock

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

pub fn write(&self) -> OrderedRwLockWriteGuardFuture<'_, T>

Notable traits for OrderedRwLockWriteGuardFuture<'a, T>

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

Acquires the mutex for are write.

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

Examples

use fast_async_mutex::rwlock_ordered::OrderedRwLock;

#[tokio::main]
async fn main() {
    let mutex = OrderedRwLock::new(10);
    let mut guard = mutex.write().await;
    *guard += 1;
    assert_eq!(*guard, 11);
}

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

Acquires the mutex for are write.

Returns a guard that releases the mutex and wake the next locker when it will be dropped. WriteLockOwnedGuard have a 'static lifetime, but requires the Arc<RWLock<T>> type

Examples

use fast_async_mutex::rwlock_ordered::OrderedRwLock;
use std::sync::Arc;
#[tokio::main]
async fn main() {
    let mutex = Arc::new(OrderedRwLock::new(10));
    let mut guard = mutex.write_owned().await;
    *guard += 1;
    assert_eq!(*guard, 11);
}

pub fn read(&self) -> OrderedRwLockReadGuardFuture<'_, T>

Notable traits for OrderedRwLockReadGuardFuture<'a, T>

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

Acquires the mutex for are read.

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

Examples

use fast_async_mutex::rwlock_ordered::OrderedRwLock;

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

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

Acquires the mutex for are write.

Returns a guard that releases the mutex and wake the next locker when it will be dropped. WriteLockOwnedGuard have a 'static lifetime, but requires the Arc<RWLock<T>> type

Examples

use fast_async_mutex::rwlock_ordered::OrderedRwLock;
use std::sync::Arc;
#[tokio::main]
async fn main() {
    let mutex = Arc::new(OrderedRwLock::new(10));
    let guard = mutex.read().await;
    let guard2 = mutex.read().await;
    assert_eq!(*guard, *guard2);
}

pub fn try_acquire_reader(&self, id: usize) -> bool[src]

Trait Implementations

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

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

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

Auto Trait Implementations

impl<T> !RefUnwindSafe for OrderedRwLock<T>

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

impl<T: ?Sized> UnwindSafe for OrderedRwLock<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.