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

Класс RwLock

Класс RwLock (read-write lock) - это примитив синхронизации, который позволяет либо нескольким читателям одновременно получать доступ к данным, либо одному писателю изменять их. В отличие от Mutex, который блокирует доступ для всех остальных потоков, RwLock эффективен в ситуациях, когда чтений значительно больше, чем записей. Конструктор RwLock::new принимает значение, которое нужно защитить.

Синтаксис

use std::sync::RwLock; let lock = RwLock::new(value);

Пример

Давайте создадим RwLock и прочитаем значение через метод read, который возвращает RAII-страж для чтения:

use std::sync::RwLock; fn main() { let lock = RwLock::new(5); { let read_guard = lock.read().unwrap(); println!("{}", *read_guard); } let write_guard = lock.write().unwrap(); println!("{}", *write_guard); }

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

5 5

Пример

Давайте изменим значение внутри RwLock через метод write:

use std::sync::RwLock; fn main() { let lock = RwLock::new(vec![1, 2, 3, 4, 5]); { let mut write_guard = lock.write().unwrap(); write_guard.push(6); } let read_guard = lock.read().unwrap(); println!("{:?}", *read_guard); }

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

[1, 2, 3, 4, 5, 6]

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

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