3 个版本

0.1.2 2023年3月29日
0.1.1 2023年3月21日
0.1.0 2023年3月20日

#1141 in 并发

Download history 2/week @ 2024-03-16 22/week @ 2024-03-30 2/week @ 2024-04-06

每月183次下载
2 个 Crates 中使用 (通过 shukusai)

MIT 许可证

10KB
69

RoLock

Windows macOS Linux crates.io docs.rs

只读锁。

这是一个围绕 Arc<RwLock<T>> 的包装器,仅实现 RwLock::read() 操作。

用法

thread_1 中创建一个普通的 Arc<RwLock<T>>,将 RoLock 发送到 thread_2

let rw = Arc::new(RwLock::new(0));     // Regular Arc<RwLock<T>>.
let ro = RoLock::new(&rw);             // Read Only Lock.

assert!(*rw.read().unwrap() == 0);     // This can read...
*rw.write().unwrap() = 1;              // and write.

std::thread::spawn(move|| {
	assert!(*ro.read().unwrap() == 1); // This one can only read.
});
  • thread_1 仍然拥有完整的读写控制
  • thread_2 只能 RoLock::read()

这种类型在编译时保证不能写入,因为函数本身就不存在

let rw = Arc::new(RwLock::new(0));
let ro = RoLock::new(&rw);

ro.write(); // Compile error!

由于 RoLock 的内部字段 (self.0) 是私有的,因此也无法直接调用 RwLock::write

let rw = Arc::new(RwLock::new(0));
let ro = RoLock::new(&rw);

ro.0.write(); // Compile error!

无运行时依赖