Struct tokio::sync::MutexGuard [−][src]
pub struct MutexGuard<'a, T: ?Sized> { /* fields omitted */ }
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
impl<'a, T: ?Sized> MutexGuard<'a, T>
[src]
impl<'a, T: ?Sized> MutexGuard<'a, T>
[src]pub fn map<U, F>(this: Self, f: F) -> MappedMutexGuard<'a, U> where
F: FnOnce(&mut T) -> &mut U,
[src]
F: FnOnce(&mut T) -> &mut U,
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);
pub fn try_map<U, F>(this: Self, f: F) -> Result<MappedMutexGuard<'a, U>, Self> where
F: FnOnce(&mut T) -> Option<&mut U>,
[src]
F: FnOnce(&mut T) -> Option<&mut U>,
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
impl<T: ?Sized + Debug> Debug for MutexGuard<'_, T>
[src]
impl<T: ?Sized + Debug> Debug for MutexGuard<'_, T>
[src]impl<T: ?Sized> Deref for MutexGuard<'_, T>
[src]
impl<T: ?Sized> Deref for MutexGuard<'_, T>
[src]impl<T: ?Sized> DerefMut for MutexGuard<'_, T>
[src]
impl<T: ?Sized> DerefMut for MutexGuard<'_, T>
[src]impl<T: ?Sized + Display> Display for MutexGuard<'_, T>
[src]
impl<T: ?Sized + Display> Display for MutexGuard<'_, T>
[src]impl<T: ?Sized> Sync for MutexGuard<'_, T> where
T: Send + Sync,
[src]
T: Send + Sync,
Auto Trait Implementations
impl<'a, T> !RefUnwindSafe for MutexGuard<'a, T>
impl<'a, T: ?Sized> Send for MutexGuard<'a, T> where
T: Send,
T: Send,