РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1069 of 1245 menu

Тип 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,
    который извлекает данные из мьютекса, потребляя его
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить