Struct tokio::sync::MutexGuard [−][src]
pub struct MutexGuard<'a, T: ?Sized> { /* fields omitted */ }
sync
only.Expand description
A handle to a held Mutex
. The guard can be held across any .await
point
as it is Send
.
As long as you have this guard, you have exclusive access to the underlying
T
. The guard internally borrows the Mutex
, so the mutex will not be
dropped while a guard exists.
The lock is automatically released whenever the guard is dropped, at which
point lock
will succeed yet again.
Implementations
Makes a new MappedMutexGuard
for a component of the locked data.
This operation cannot fail as the MutexGuard
passed in already locked the mutex.
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 locked data.
Examples
use tokio::sync::{Mutex, MutexGuard}; #[derive(Debug, Clone, Copy, PartialEq, Eq)] struct Foo(u32); let foo = Mutex::new(Foo(1)); { let mut mapped = MutexGuard::map(foo.lock().await, |f| &mut f.0); *mapped = 2; } assert_eq!(Foo(2), *foo.lock().await);
Attempts to make a new MappedMutexGuard
for a component of the locked data. The
original guard is returned if the closure returns None
.
This operation cannot fail as the MutexGuard
passed in already locked the mutex.
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 locked data.
Examples
use tokio::sync::{Mutex, MutexGuard}; #[derive(Debug, Clone, Copy, PartialEq, Eq)] struct Foo(u32); let foo = Mutex::new(Foo(1)); { let mut mapped = MutexGuard::try_map(foo.lock().await, |f| Some(&mut f.0)) .expect("should not fail"); *mapped = 2; } assert_eq!(Foo(2), *foo.lock().await);
Trait Implementations
Auto Trait Implementations
impl<'a, T> !RefUnwindSafe for MutexGuard<'a, T>
impl<'a, T: ?Sized> Send for MutexGuard<'a, T> where
T: Send,
impl<'a, T: ?Sized> Unpin for MutexGuard<'a, T>
impl<'a, T> !UnwindSafe for MutexGuard<'a, T>