3 个版本
0.1.2 | 2023年3月29日 |
---|---|
0.1.1 | 2023年3月21日 |
0.1.0 | 2023年3月20日 |
#1141 in 并发
每月183次下载
在 2 个 Crates 中使用 (通过 shukusai)
10KB
69 行
RoLock
只读锁。
这是一个围绕 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!