Struct OwnedRwLockWriteGuard
pub struct OwnedRwLockWriteGuard<T: ?Sized> { /* private fields */ }
Owned RAII structure used to release the exclusive write access of a lock when dropped.
This structure is created by the write_owned method
on RwLock.
Implementations
impl<T: ?Sized> OwnedRwLockWriteGuard<T>
fn map<F, U: ?Sized>(this: Self, f: F) -> OwnedRwLockMappedWriteGuard<T, U> where F: FnOnce(&mut T) -> &mut U,Makes a new
OwnedRwLockMappedWriteGuardfor a component of the locked data.This operation cannot fail as the
OwnedRwLockWriteGuardpassed in already locked the data.This is an associated function that needs to be used as
OwnedRwLockWriteGuard::map(..). A method would interfere with methods of the same name on the contents of the locked data.Examples
use Arc; use ; ; # # asyncfn downgrade_map<F, U: ?Sized>(this: Self, f: F) -> OwnedRwLockReadGuard<T, U> where F: FnOnce(&T) -> &U,Makes a new
OwnedRwLockReadGuardfor a component of the locked data.This operation cannot fail as the
OwnedRwLockWriteGuardpassed in already locked the data.This is an associated function that needs to be used as
OwnedRwLockWriteGuard::downgrade_map(..). A method would interfere with methods of the same name on the contents of the locked data.Inside of
f, you retain exclusive access to the data, despite only being given a&T. Handing out a&mut Twould result in unsoundness, as you could use interior mutability.Examples
use Arc; use ; ; # # asyncfn try_map<F, U: ?Sized>(this: Self, f: F) -> Result<OwnedRwLockMappedWriteGuard<T, U>, Self> where F: FnOnce(&mut T) -> Option<&mut U>,Attempts to make a new
OwnedRwLockMappedWriteGuardfor a component of the locked data. The original guard is returned if the closure returnsNone.This operation cannot fail as the
OwnedRwLockWriteGuardpassed in already locked the data.This is an associated function that needs to be used as
OwnedRwLockWriteGuard::try_map(...). A method would interfere with methods of the same name on the contents of the locked data.Examples
use Arc; use ; ; # # asyncfn try_downgrade_map<F, U: ?Sized>(this: Self, f: F) -> Result<OwnedRwLockReadGuard<T, U>, Self> where F: FnOnce(&T) -> Option<&U>,Attempts to make a new
OwnedRwLockReadGuardfor a component of the locked data. The original guard is returned if the closure returnsNone.This operation cannot fail as the
OwnedRwLockWriteGuardpassed in already locked the data.This is an associated function that needs to be used as
OwnedRwLockWriteGuard::try_downgrade_map(...). A method would interfere with methods of the same name on the contents of the locked data.Inside of
f, you retain exclusive access to the data, despite only being given a&T. Handing out a&mut Twould result in unsoundness, as you could use interior mutability.If this function returns
Err(...), the lock is never unlocked nor downgraded.Examples
use Arc; use ; ; # # asyncfn into_mapped(this: Self) -> OwnedRwLockMappedWriteGuard<T>Converts this
OwnedRwLockWriteGuardinto anOwnedRwLockMappedWriteGuard. This method can be used to store a non-mapped guard in a struct field that expects a mapped guard.This is equivalent to calling
OwnedRwLockWriteGuard::map(guard, |me| me).fn downgrade(self) -> OwnedRwLockReadGuard<T>Atomically downgrades a write lock into a read lock without allowing any writers to take exclusive access of the lock in the meantime.
Note: This won't necessarily allow any additional readers to acquire locks, since
RwLockis fair and it is possible that a writer is next in line.Returns an RAII guard which will drop this read access of the
RwLockwhen dropped.Examples
# use RwLock; # use Arc; # # # asyncfn rwlock(this: &Self) -> &Arc<RwLock<T>>Returns a reference to the original
Arc<RwLock>.Examples
use Arc; use ; # # async
Trait Implementations
impl<T> Debug for OwnedRwLockWriteGuard<T>
where
T: Debug + ?Sized,
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl<T> Display for OwnedRwLockWriteGuard<T>
where
T: Display + ?Sized,
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl<T> Send for OwnedRwLockWriteGuard<T>
where
T: ?Sized + Send + Sync,
impl<T> Sync for OwnedRwLockWriteGuard<T>
where
T: ?Sized + Send + Sync,
impl<T: ?Sized> Deref for OwnedRwLockWriteGuard<T>
type Target = T;fn deref(&self) -> &T
impl<T: ?Sized> DerefMut for OwnedRwLockWriteGuard<T>
fn deref_mut(&mut self) -> &mut T
impl<T: ?Sized> Drop for OwnedRwLockWriteGuard<T>
fn drop(&mut self)
Auto Trait Implementations
impl<T> !RefUnwindSafe for OwnedRwLockWriteGuard<T>
impl<T> !UnwindSafe for OwnedRwLockWriteGuard<T>
impl<T> Freeze for OwnedRwLockWriteGuard<T>
where
Arc<RwLock<T>>: Freeze,
*mut T: Freeze,
PhantomData<T>: Freeze,
T: ?Sized,
impl<T> Unpin for OwnedRwLockWriteGuard<T>
where
Arc<RwLock<T>>: Unpin,
*mut T: Unpin,
PhantomData<T>: Unpin,
T: ?Sized,
impl<T> UnsafeUnpin for OwnedRwLockWriteGuard<T>
where
Arc<RwLock<T>>: UnsafeUnpin,
*mut T: UnsafeUnpin,
PhantomData<T>: UnsafeUnpin,
T: ?Sized,
Blanket Implementations
impl<P, T> Receiver for OwnedRwLockWriteGuard<T>
where
P: Deref<Target = T> + ?Sized,
T: ?Sized,
type Target = T;
impl<T> Any for OwnedRwLockWriteGuard<T>
where
T: 'static + ?Sized,
fn type_id(&self) -> TypeId
impl<T> Borrow<T> for OwnedRwLockWriteGuard<T>
where
T: ?Sized,
fn borrow(&self) -> &T
impl<T> BorrowMut<T> for OwnedRwLockWriteGuard<T>
where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> From<T> for OwnedRwLockWriteGuard<T>
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToString for OwnedRwLockWriteGuard<T>
where
T: Display + ?Sized,
fn to_string(&self) -> String
impl<T, U> Into<U> for OwnedRwLockWriteGuard<T>
where
U: From<T>,
fn into(self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom<U> for OwnedRwLockWriteGuard<T>
where
U: Into<T>,
type Error = never;fn try_from(value: U) -> Result<T, never>
impl<T, U> TryInto<U> for OwnedRwLockWriteGuard<T>
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error;fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>