| Crates.io | rolock |
| lib.rs | rolock |
| version | 0.1.2 |
| created_at | 2023-03-20 02:04:43.147704+00 |
| updated_at | 2023-03-29 18:47:35.366269+00 |
| description | Read Only Lock |
| homepage | |
| repository | https://github.com/hinto-janai/rolock |
| max_upload_size | |
| id | 814828 |
| size | 14,270 |
Read Only Lock.
This is a wrapper around Arc<RwLock<T>> that only implements RwLock::read() operations.
Create a normal Arc<RwLock<T>> in thread_1, send a RoLock to 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 still has full read/write controlthread_2 can only RoLock::read()This type guarantees at compile time that you cannot write because the function doesn't even exist:
let rw = Arc::new(RwLock::new(0));
let ro = RoLock::new(&rw);
ro.write(); // Compile error!
Since the inner field of RoLock (self.0) is private, you can't call RwLock::write directly either:
let rw = Arc::new(RwLock::new(0));
let ro = RoLock::new(&rw);
ro.0.write(); // Compile error!