Метод 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,
который потребляет мьютекс и возвращает содержащееся в нём значение