RwMutexUpgradeableGuard

Struct RwMutexUpgradeableGuard 

Source
pub struct RwMutexUpgradeableGuard<'a, T> { /* private fields */ }
Expand description

A guard that provides immutable data access but can be atomically upgraded to RwMutexWriteGuard.

Implementations§

Source§

impl<'a, T> RwMutexUpgradeableGuard<'a, T>

Source

pub closed spec fn type_inv(self) -> bool

Source

pub closed spec fn value(self) -> T

Source

pub open spec fn view(self) -> T

{ self.value() }
Source§

impl<'a, T> RwMutexUpgradeableGuard<'a, T>

Source

pub exec fn upgrade(self) -> RwMutexWriteGuard<'a, T>

Upgrades this upread guard to a write guard atomically.

After calling this method, subsequent readers will be blocked while previous readers remain unaffected.

The calling thread will not sleep, but spin to wait for the existing reader to be released. There are two main reasons.

  • First, it needs to sleep in an extra waiting queue and needs extra wake-up logic and overhead.
  • Second, upgrading method usually requires a high response time (because the mutex is being used now).
Source

pub exec fn drop(self)

Trait Implementations§

Source§

impl<T> Deref for RwMutexUpgradeableGuard<'_, T>

Source§

exec fn deref(&self) -> &T

returns
self.view(),
Source§

type Target = T

The resulting type after dereferencing.
Source§

impl<T> !Send for RwMutexUpgradeableGuard<'_, T>

Source§

impl<T: Sync> Sync for RwMutexUpgradeableGuard<'_, T>

Auto Trait Implementations§

§

impl<'a, T> Freeze for RwMutexUpgradeableGuard<'a, T>

§

impl<'a, T> !RefUnwindSafe for RwMutexUpgradeableGuard<'a, T>

§

impl<'a, T> Unpin for RwMutexUpgradeableGuard<'a, T>
where T: Unpin,

§

impl<'a, T> !UnwindSafe for RwMutexUpgradeableGuard<'a, 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
§

impl<T> DerefSpec for T
where T: Deref,

§

fn deref_spec(&self) -> &<T as Deref>::Target

§

fn deref_spec_eq(&self)

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, VERUS_SPEC__A> FromSpec<T> for VERUS_SPEC__A
where VERUS_SPEC__A: From<T>,

§

fn obeys_from_spec() -> bool

§

fn from_spec(v: T) -> VERUS_SPEC__A

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.

§

impl<T, VERUS_SPEC__A> IntoSpec<T> for VERUS_SPEC__A
where VERUS_SPEC__A: Into<T>,

§

fn obeys_into_spec() -> bool

§

fn into_spec(self) -> T

§

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

§

fn obeys_into_spec() -> bool

§

fn into_spec(self) -> U

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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, VERUS_SPEC__A> TryFromSpec<T> for VERUS_SPEC__A
where VERUS_SPEC__A: TryFrom<T>,

§

fn obeys_try_from_spec() -> bool

§

fn try_from_spec( v: T, ) -> Result<VERUS_SPEC__A, <VERUS_SPEC__A as TryFrom<T>>::Error>

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.
§

impl<T, VERUS_SPEC__A> TryIntoSpec<T> for VERUS_SPEC__A
where VERUS_SPEC__A: TryInto<T>,

§

fn obeys_try_into_spec() -> bool

§

fn try_into_spec(self) -> Result<T, <VERUS_SPEC__A as TryInto<T>>::Error>

§

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

§

fn obeys_try_into_spec() -> bool

§

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