問題一覧に戻る
上級並行性
問題90: RwLock
RwLock(読み書きロック)は複数の読み取りまたは一つの書き込みを許可します。複数のスレッドが同時に読み取りロックを保持できますが、書き込みロックは排他的です。読み取りが書き込みより多い場合にパフォーマンスが向上。read()は読み取りロック、write()は書き込みロックを取得。Mutex同様、非ブロッキングのtry_バリアントもあります。
use std::sync::;
use std::thread;
fn main() {
// RwLockの作成
let data = ::new(5);
// 複数の読み取り
{
let r1 = data.().unwrap();
let r2 = data.().unwrap();
println!("Read 1: {}, Read 2: {}", *r1, *r2);
}
// 単一の書き込み
{
let mut w = data.().unwrap();
*w += 1;
println!("Written: {}", *w);
}
// try_writeを使用
let r = data.read().unwrap();
match data.() {
Ok(_) => println!("Got write lock"),
Err(_) => println!("Write blocked by read"),
}
drop(r);
}