Appearance
29.3 RwLock
RwLock 就是“读写锁”。它跟 Mutex 很像,主要区别是对外暴露的 API 不一样。对 Mutex 内部的数据读写,都是调用同样的 lock 方法;而对 RwLock 内部的数据读写,它分别提供了一个成员方法 read/write 来做这个事情。其他方面基本和 Mutex 一致。示例如下:
rust
use std::sync::Arc;
use std::sync::RwLock;
use std::thread;
const COUNT: u32 = 1000000;
fn main() {
let global = Arc::new(RwLock::new(0));
let clone1 = global.clone();
let thread1 = thread::spawn(move|| {
for _ in 0..COUNT {
let mut value = clone1.write().unwrap();
*value += 1;
}
});
let clone2 = global.clone();
let thread2 = thread::spawn(move|| {
for _ in 0..COUNT {
let mut value = clone2.write().unwrap();
*value -= 1;
}
});
thread1.join().ok();
thread2.join().ok();
println!("final value: {:?}", global);
}