Метод write класса RwLock
Метод write класса RwLock используется для получения
исключительной блокировки на запись. Пока поток удерживает
такую блокировку, ни один другой поток не может получить
ни блокировку на чтение, ни блокировку на запись. Метод
блокирует текущий поток до тех пор, пока блокировка не
станет доступной, и возвращает объект RwLockWriteGuard.
Если во время удержания блокировки на запись другой поток
попытается получить доступ к данным, произойдёт взаимная
блокировка (deadlock).
Параметров метод не принимает. Он вызывается у экземпляра
RwLock и паникует, если во время ожидания блокировки
произошла ошибка, связанная с блокировкой. Возвращаемое
значение - LockResult<RwLockWriteGuard<T>>, из
которого обычно извлекают сам guard через unwrap.
Синтаксис
rwlock.write()
Пример
Давайте создадим RwLock с числом и запишем в него
новое значение через метод write:
use std::sync::RwLock;
fn main()
{
let rwlock = RwLock::new(5);
{
let mut guard = rwlock.write().unwrap();
*guard = 10;
}
let res = *rwlock.read().unwrap();
println!("{}", res);
}
Результат выполнения кода:
10
Пример
Давайте используем RwLock с вектором и добавим в него
новый элемент через метод write:
use std::sync::RwLock;
fn main()
{
let rwlock = RwLock::new(vec![1, 2, 3]);
{
let mut guard = rwlock.write().unwrap();
guard.push(4);
}
let res = rwlock.read().unwrap();
println!("{:?}", *res);
}
Результат выполнения кода:
[1, 2, 3, 4]