Тип MutexGuard
Тип MutexGuard - это умный указатель, который предоставляет доступ к данным внутри Mutex. Он автоматически создаётся при вызове метода lock или try_lock и освобождает мьютекс при выходе из области видимости (реализует трейты Deref и DerefMut). Параметров тип не принимает, так как является обёрткой, хранящей ссылку на мьютекс и флаг освобождения.
Синтаксис
std::sync::MutexGuard<'a, T>
Пример
Давайте создадим мьютекс, защищающий число, и получим доступ к нему через MutexGuard:
use std::sync::Mutex;
fn main()
{
let m = Mutex::new(5);
{
let mut guard = m.lock().unwrap();
*guard += 1;
println!("{}", *guard);
}
println!("{:?}", m);
}
Результат выполнения кода:
6
Mutex { data: 6, poisoned: false, .. }
Пример
Давайте проверим, что мьютекс освобождается автоматически при выходе из области видимости:
use std::sync::Mutex;
fn main()
{
let m = Mutex::new(vec![1, 2, 3, 4, 5]);
{
let mut guard = m.lock().unwrap();
guard.push(6);
println!("{:?}", *guard);
}
let guard2 = m.lock().unwrap();
println!("{:?}", *guard2);
}
Результат выполнения кода:
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
Смотрите также
-
структура
Mutex,
которая предоставляет механизм блокировки для защиты данных -
метод
lock,
который возвращаетMutexGuardпосле блокировки мьютекса -
метод
try_lock,
который пытается заблокировать мьютекс без ожидания -
метод
into_inner,
который извлекает данные из мьютекса, потребляя его