Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpSyRw 141 of 288 menu
◀ ▶

Замок чтения и записи в Rust

Замок чтения и записи удобен, когда данные часто смотрят, но редко меняют. Несколько линий могут одновременно взять доступ на чтение, а запись ждет, пока все читатели отпустят оболочки.

Проверим два чтения одного числа без ожидания друг друга:

use std::sync::RwLock; fn main() { let data = RwLock::new(10); match data.read() { Ok(first) => match data.read() { Ok(second) => println!("{} {}", *first, *second), Err(_) => println!("ожидание вернуло ошибку"), }, Err(_) => println!("ожидание вернуло ошибку"), } }

На экране два раза 10. Пока живут first и second, новый писатель не войдет, но третий читатель еще может подключиться.

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

use std::sync::RwLock; fn main() { let data = RwLock::new(3); match data.write() { Ok(mut guard) => { *guard = 4; println!("{}", *guard); } Err(_) => println!("ожидание вернуло ошибку"), } }

Дано число:

let num = 7;

Создайте замок чтения и записи с этим литералом, прочитайте значение в одной ветке и выведите его.

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

Дано число:

let num = 1;

Под замком храните литерал, затем через доступ на запись замените его на удвоенное значение и выведите результат.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить