Accessing resources in parallel with RwLocks
When we shared resources with an Arc
, we only did so immutably. The moment we want our threads to mutate our resources, we need to use some kind of locking mechanism to secure the golden rule of parallelism: multiple readers or one writer. RwLock
enforces just that rule across threads and blocks them if they violate the rule.
How to do it...
In the folder
bin
, create a file calledrw_lock.rs
.Add the following code and run it with
cargo run --bin rwlock
:
1 use std::sync::{Arc, RwLock}; 2 use std::thread; 3 4 fn main() { 5 // An RwLock works like the RefCell, but blocks the current 6 // thread if the resource is unavailable 7 let resource = Arc::new(RwLock::new("Hello World!".to_string())); 8 9 // The reader_a thread will print the current content of 10 // our resource fourty times 11 let reader_a = { 12 let resource = resource.clone(); 13 thread::spawn(move || { 14 for _ in 0..40 { 15 // Lock resource for reading access 16 let resource =...