Struct readlock::SharedReadLock

source ·
pub struct SharedReadLock<T: ?Sized>(/* private fields */);
Expand description

A read-only reference to a resource possibly shared with up to one Shared and many WeakReadLocks.

Implementations§

source§

impl<T: ?Sized> SharedReadLock<T>

source

pub fn lock(&self) -> SharedReadGuard<'_, T>

Lock this SharedReadLock, blocking the current thread until the operation succeeds.

source

pub fn try_lock(&self) -> TryLockResult<SharedReadGuard<'_, T>>

Try to lock this SharedReadLock.

If the value is currently locked for writing through the corresponding Shared instance or the lock was poisoned, returns TryLockError.

source

pub fn downgrade(&self) -> WeakReadLock<T>

Create a new WeakReadLock pointer to this allocation.

source

pub fn try_upgrade(self) -> Result<Shared<T>, Self>

Upgrade a SharedReadLock to Shared.

This only return Ok(_) if there are no other references (including a Shared, or weak references) to the inner value, since otherwise it would be possible to have multiple Shareds for the same inner value alive at the same time, which would violate Shareds invariant of being the only reference that is able to mutate the inner value.

source

pub fn from_inner(rwlock: Arc<RwLock<T>>) -> Self

Create a SharedReadLock from its internal representation, Arc<RwLock<T>>.

You can use this to create a SharedReadLock from a shared RwLock without ever using Shared, if you want to expose an API where there is a value that can be written only from inside one module or crate, but outside users should be allowed to obtain a reusable lock for reading the inner value.

source

pub fn try_into_inner(self) -> Result<Arc<RwLock<T>>, Self>

Attempt to turn this SharedReadLock into its internal representation, Arc<RwLock<T>>.

This returns Ok(_) only if there are no further references (including a Shared, or weak references) to the inner value, since otherwise it would be possible to have a Shared and an Arc<RwLock<T>> for the same inner value alive at the same time, which would violate Shareds invariant of being the only reference that is able to mutate the inner value.

Trait Implementations§

source§

impl<T: ?Sized> Clone for SharedReadLock<T>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: Debug + ?Sized> Debug for SharedReadLock<T>

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> Freeze for SharedReadLock<T>
where T: ?Sized,

§

impl<T> RefUnwindSafe for SharedReadLock<T>
where T: ?Sized,

§

impl<T> Send for SharedReadLock<T>
where T: Send + Sync + ?Sized,

§

impl<T> Sync for SharedReadLock<T>
where T: Send + Sync + ?Sized,

§

impl<T> Unpin for SharedReadLock<T>
where T: ?Sized,

§

impl<T> UnwindSafe for SharedReadLock<T>
where T: ?Sized,

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> CloneToUninit for T
where T: Clone,

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

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

§

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

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

§

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.