[−][src]Struct fast_async_mutex::rwlock_ordered::OrderedRwLock
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]
Notable traits for OrderedRwLockWriteGuardFuture<'a, T>
impl<'a, T: ?Sized> Future for OrderedRwLockWriteGuardFuture<'a, T> type Output = OrderedRwLockWriteGuard<'a, T>;
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>ⓘNotable traits for OrderedRwLockWriteOwnedGuardFuture<T>
impl<T: ?Sized> Future for OrderedRwLockWriteOwnedGuardFuture<T> type Output = OrderedRwLockWriteOwnedGuard<T>;
[src]
Notable traits for OrderedRwLockWriteOwnedGuardFuture<T>
impl<T: ?Sized> Future for OrderedRwLockWriteOwnedGuardFuture<T> type Output = OrderedRwLockWriteOwnedGuard<T>;
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]
Notable traits for OrderedRwLockReadGuardFuture<'a, T>
impl<'a, T: ?Sized> Future for OrderedRwLockReadGuardFuture<'a, T> type Output = OrderedRwLockReadGuard<'a, T>;
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>ⓘNotable traits for OrderedRwLockReadOwnedGuardFuture<T>
impl<T: ?Sized> Future for OrderedRwLockReadOwnedGuardFuture<T> type Output = OrderedRwLockReadOwnedGuard<T>;
[src]
Notable traits for OrderedRwLockReadOwnedGuardFuture<T>
impl<T: ?Sized> Future for OrderedRwLockReadOwnedGuardFuture<T> type Output = OrderedRwLockReadOwnedGuard<T>;
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]
T: Send,
impl<T: ?Sized> Sync for OrderedRwLock<T> where
T: Send + Sync,
[src]
T: Send + Sync,
Auto Trait Implementations
impl<T> !RefUnwindSafe for OrderedRwLock<T>
impl<T: ?Sized> Unpin for OrderedRwLock<T> where
T: Unpin,
T: Unpin,
impl<T: ?Sized> UnwindSafe for OrderedRwLock<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>,