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

Метод try_read

Метод try_read класса RwLock пытается получить блокировку для чтения, не блокируя текущий поток. Он возвращает значение типа TryLockResult, которое может быть либо Ok с RwLockReadGuard, либо Err с причиной неудачи. Параметров метод не принимает.

В отличие от метода read, который приостанавливает поток до освобождения блокировки, try_read сразу возвращает управление, если блокировка занята. Это удобно, когда нужно избежать взаимной блокировки или реализовать неблокирующую логику.

Синтаксис

rwlock.try_read()

Пример

Давайте создадим RwLock и попробуем получить блокировку чтения, когда она свободна:

use std::sync::RwLock; fn main() { let rwlock = RwLock::new(5); match rwlock.try_read() { Ok(guard) => { println!("Read lock acquired: {}", *guard); } Err(e) => { println!("Failed to acquire read lock: {:?}", e); } } }

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

Read lock acquired: 5

Пример

Давайте попробуем получить блокировку чтения, когда уже удерживается блокировка записи:

use std::sync::RwLock; fn main() { let rwlock = RwLock::new(5); let _write_guard = rwlock.write().unwrap(); match rwlock.try_read() { Ok(guard) => { println!("Read lock acquired: {}", *guard); } Err(e) => { println!("Failed to acquire read lock: {:?}", e); } } }

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

Failed to acquire read lock: WouldBlock

Пример

Давайте попробуем получить блокировку чтения, когда уже удерживаются другие блокировки чтения. Это допустимо:

use std::sync::RwLock; fn main() { let rwlock = RwLock::new(5); let _read_guard1 = rwlock.read().unwrap(); match rwlock.try_read() { Ok(guard) => { println!("Read lock acquired: {}", *guard); } Err(e) => { println!("Failed to acquire read lock: {:?}", e); } } }

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

Read lock acquired: 5

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

  • метод read,
    который блокирует поток до получения блокировки чтения
  • метод write,
    который получает блокировку записи, блокируя поток
  • метод try_write,
    который пытается получить блокировку записи без блокировки
  • класс RwLock,
    который предоставляет блокировку чтения и записи
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить