use std::sync::RwLock;
fn main() {
let lock = RwLock::new(5);
{
let r1 = lock.read().unwrap();
let r2 = lock.read().unwrap();
println!("r1={}, r2={}", r1, r2);
}
{
let mut w = lock.write().unwrap();
*w = 6;
}
println!("value: {}", *lock.read().unwrap());
}
use std::sync::{Arc, RwLock};
use std::thread;
fn main() {
let data = Arc::new(RwLock::new(vec![1, 2, 3]));
let mut handles = vec![];
for i in 0..3 {
let data = Arc::clone(&data);
handles.push(thread::spawn(move || {
let r = data.read().unwrap();
println!("读者 {}: {:?}", i, *r);
}));
}
let data_clone = Arc::clone(&data);
handles.push(thread::spawn(move || {
let mut w = data_clone.write().unwrap();
w.push(4);
println!("写者完成: {:?}", *w);
}));
for h in handles { h.join().unwrap(); }
}