Класс 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]