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

Метод try_lock

Метод try_lock пытается захватить блокировку мьютекса без блокировки текущего потока. Если блокировка доступна, метод возвращает Ok с MutexGuard, который автоматически освобождает блокировку при выходе из области видимости. Если блокировка уже захвачена другим потоком, метод немедленно возвращает Err. Параметров метод не принимает.

Синтаксис

mutex.try_lock()

Пример

Давайте создадим мьютекс и попробуем захватить блокировку методом try_lock:

use std::sync::Mutex; fn main() { let mutex = Mutex::new(5); let res = mutex.try_lock(); println!("{:?}", res); }

Результат выполнения кода:

Ok(5)

Пример

Давайте захватим блокировку и попробуем захватить её повторно методом try_lock:

use std::sync::Mutex; fn main() { let mutex = Mutex::new(5); let _guard = mutex.lock().unwrap(); let res = mutex.try_lock(); println!("{:?}", res); }

Результат выполнения кода:

Err(Poisoned(..))

Пример

Давайте освободим блокировку и снова попробуем захватить её методом try_lock:

use std::sync::Mutex; fn main() { let mutex = Mutex::new(5); { let _guard = mutex.lock().unwrap(); } let res = mutex.try_lock(); println!("{:?}", res); }

Результат выполнения кода:

Ok(5)

Смотрите также

  • класс Mutex,
    который представляет собой мьютекс для безопасного обмена данными между потоками
  • метод new,
    который создаёт новый мьютекс с указанным значением
  • метод lock,
    который захватывает блокировку, блокируя текущий поток до её освобождения
  • метод into_inner,
    который потребляет мьютекс и возвращает содержащееся в нём значение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить