Skip to content

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);
}

Released under the MIT License