pub struct MutexGuard<'a, T>where
T: 'a + ?Sized,{ /* private fields */ }
Expand description
An RAII implementation of a “scoped lock” of a mutex. When this structure is dropped (falls out of scope), the lock will be unlocked.
The data protected by the mutex can be accessed through this guard via its
Deref
and DerefMut
implementations.
This structure is created by the lock
and try_lock
methods on
Mutex
.
Implementations§
Source§impl<'a, T> MutexGuard<'a, T>where
T: ?Sized,
impl<'a, T> MutexGuard<'a, T>where
T: ?Sized,
Sourcepub fn map<U, F>(orig: MutexGuard<'a, T>, f: F) -> MappedMutexGuard<'a, U>
🔬This is a nightly-only experimental API. (mapped_lock_guards
)
pub fn map<U, F>(orig: MutexGuard<'a, T>, f: F) -> MappedMutexGuard<'a, U>
mapped_lock_guards
)Makes a MappedMutexGuard
for a component of the borrowed data, e.g.
an enum variant.
The Mutex
is already locked, so this cannot fail.
This is an associated function that needs to be used as
MutexGuard::map(...)
. A method would interfere with methods of the
same name on the contents of the MutexGuard
used through Deref
.
Sourcepub fn try_map<U, F>(
orig: MutexGuard<'a, T>,
f: F,
) -> Result<MappedMutexGuard<'a, U>, MutexGuard<'a, T>>
🔬This is a nightly-only experimental API. (mapped_lock_guards
)
pub fn try_map<U, F>( orig: MutexGuard<'a, T>, f: F, ) -> Result<MappedMutexGuard<'a, U>, MutexGuard<'a, T>>
mapped_lock_guards
)Makes a MappedMutexGuard
for a component of the borrowed data. The
original guard is returned as an Err(...)
if the closure returns
None
.
The Mutex
is already locked, so this cannot fail.
This is an associated function that needs to be used as
MutexGuard::try_map(...)
. A method would interfere with methods of the
same name on the contents of the MutexGuard
used through Deref
.
Trait Implementations§
1.16.0 · Source§impl<T> Debug for MutexGuard<'_, T>
impl<T> Debug for MutexGuard<'_, T>
1.0.0 · Source§impl<T> Deref for MutexGuard<'_, T>where
T: ?Sized,
impl<T> Deref for MutexGuard<'_, T>where
T: ?Sized,
1.0.0 · Source§impl<T> DerefMut for MutexGuard<'_, T>where
T: ?Sized,
impl<T> DerefMut for MutexGuard<'_, T>where
T: ?Sized,
1.20.0 · Source§impl<T> Display for MutexGuard<'_, T>
impl<T> Display for MutexGuard<'_, T>
1.0.0 · Source§impl<T> Drop for MutexGuard<'_, T>where
T: ?Sized,
impl<T> Drop for MutexGuard<'_, T>where
T: ?Sized,
impl<T> !Send for MutexGuard<'_, T>where
T: ?Sized,
A MutexGuard
is not Send
to maximize platform portablity.
On platforms that use POSIX threads (commonly referred to as pthreads) there is a requirement to
release mutex locks on the same thread they were acquired.
For this reason, MutexGuard
must not implement Send
to prevent it being dropped from
another thread.
impl<T> Sync for MutexGuard<'_, T>
T
must be Sync
for a MutexGuard<T>
to be Sync
because it is possible to get a &T
from &MutexGuard
(via Deref
).
Auto Trait Implementations§
impl<'a, T> Freeze for MutexGuard<'a, T>where
T: ?Sized,
impl<'a, T> RefUnwindSafe for MutexGuard<'a, T>where
T: ?Sized,
impl<'a, T> Unpin for MutexGuard<'a, T>where
T: ?Sized,
impl<'a, T> UnwindSafe for MutexGuard<'a, T>where
T: ?Sized,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more