Skip to main content

RwLockWriteGuard

Struct RwLockWriteGuard 

Source
pub struct RwLockWriteGuard<'a, R: RawRwLock, T: ?Sized> { /* private fields */ }
Expand description

An RAII guard which releases exclusive write access when dropped.

This structure is created by the write and try_write methods on RwLock.

Implementations§

Source§

impl<'a, R: RawRwLock + 'a, T: ?Sized + 'a> RwLockWriteGuard<'a, R, T>

Source

pub fn rwlock(s: &Self) -> &'a RwLock<R, T>

Returns a reference to the original reader-writer lock object.

Source

pub fn map<U: ?Sized, F>(s: Self, f: F) -> MappedRwLockWriteGuard<'a, R, U>
where F: FnOnce(&mut T) -> &mut U,

Makes a new MappedRwLockWriteGuard for a component of the locked data.

This is an associated function that needs to be used as RwLockWriteGuard::map(...). A method would interfere with methods of the same name on the contents of the locked data.

§Panics

If f panics, the original guard is dropped.

Source

pub fn try_map<U: ?Sized, F>( s: Self, f: F, ) -> Result<MappedRwLockWriteGuard<'a, R, U>, Self>
where F: FnOnce(&mut T) -> Option<&mut U>,

Attempts to make a new MappedRwLockWriteGuard for a component of the locked data. The original guard is returned if the closure returns None.

This is an associated function that needs to be used as RwLockWriteGuard::try_map(...). A method would interfere with methods of the same name on the contents of the locked data.

§Panics

If f panics, the original guard is dropped.

Source

pub fn try_map_or_err<U: ?Sized, F, E>( s: Self, f: F, ) -> Result<MappedRwLockWriteGuard<'a, R, U>, (Self, E)>
where F: FnOnce(&mut T) -> Result<&mut U, E>,

Attempts to make a new MappedRwLockWriteGuard for a component of the locked data. The original guard is returned alongside arbitrary user data if the closure returns Err.

This is an associated function that needs to be used as RwLockWriteGuard::try_map_or_err(...). A method would interfere with methods of the same name on the contents of the locked data.

§Panics

If f panics, the original guard is dropped.

Source

pub fn unlocked<F, U>(s: &mut Self, f: F) -> U
where F: FnOnce() -> U,

Temporarily unlocks the RwLock to execute the given function.

This is safe because &mut guarantees that there exist no other references to the data protected by the RwLock.

§Aborts

Aborts if re-locking the RwLock panics.

Source§

impl<'a, R: RawRwLockDowngrade + 'a, T: ?Sized + 'a> RwLockWriteGuard<'a, R, T>

Source

pub fn downgrade(s: Self) -> RwLockReadGuard<'a, R, 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 that if there are any writers currently waiting to take the lock then other readers may not be able to acquire the lock even if it was downgraded.

Source§

impl<'a, R: RawRwLockUpgradeDowngrade + 'a, T: ?Sized + 'a> RwLockWriteGuard<'a, R, T>

Source

pub fn downgrade_to_upgradable(s: Self) -> RwLockUpgradableReadGuard<'a, R, T>

Atomically downgrades a write lock into an upgradable read lock without allowing any writers to take exclusive access of the lock in the meantime.

Note that if there are any writers currently waiting to take the lock then other readers may not be able to acquire the lock even if it was downgraded.

Source§

impl<'a, R: RawRwLockFair + 'a, T: ?Sized + 'a> RwLockWriteGuard<'a, R, T>

Source

pub fn unlock_fair(s: Self)

Unlocks the RwLock using a fair unlock protocol.

A fair unlock gives waiting threads priority over new acquisition attempts. This can prevent starvation, but may reduce throughput by forcing a context switch.

Source

pub fn unlocked_fair<F, U>(s: &mut Self, f: F) -> U
where F: FnOnce() -> U,

Temporarily unlocks the RwLock to execute the given function.

The RwLock is unlocked using a fair unlock protocol.

This is safe because &mut guarantees that there exist no other references to the data protected by the RwLock.

§Aborts

Aborts if re-locking the RwLock panics.

Source

pub fn bump(s: &mut Self)

Temporarily yields the RwLock to a waiting thread if there is one.

This method is functionally equivalent to calling unlock_fair followed by write, however it can be much more efficient in the case where there are no waiting threads.

Trait Implementations§

Source§

impl<'a, R: RawRwLock + 'a, T: Debug + ?Sized + 'a> Debug for RwLockWriteGuard<'a, R, T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a, R: RawRwLock + 'a, T: ?Sized + 'a> Deref for RwLockWriteGuard<'a, R, T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &T

Dereferences the value.
Source§

impl<'a, R: RawRwLock + 'a, T: ?Sized + 'a> DerefMut for RwLockWriteGuard<'a, R, T>

Source§

fn deref_mut(&mut self) -> &mut T

Mutably dereferences the value.
Source§

impl<'a, R: RawRwLock + 'a, T: Display + ?Sized + 'a> Display for RwLockWriteGuard<'a, R, T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a, R: RawRwLock + 'a, T: ?Sized + 'a> Drop for RwLockWriteGuard<'a, R, T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl<'a, R, T> !RefUnwindSafe for RwLockWriteGuard<'a, R, T>

§

impl<'a, R, T> !UnwindSafe for RwLockWriteGuard<'a, R, T>

§

impl<'a, R, T> Freeze for RwLockWriteGuard<'a, R, T>

§

impl<'a, R, T> Send for RwLockWriteGuard<'a, R, T>

§

impl<'a, R, T> Sync for RwLockWriteGuard<'a, R, T>

§

impl<'a, R, T> Unpin for RwLockWriteGuard<'a, R, T>

§

impl<'a, R, T> UnsafeUnpin for RwLockWriteGuard<'a, R, T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.