Advertisement
Guest User

Untitled

a guest
Nov 7th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 0.83 KB | None | 0 0
  1. extern crate rand;
  2.  
  3. use std::sync::{Arc,Mutex};
  4. use std::thread;
  5. use std::time::{Duration};
  6. use rand::Rng;
  7.  
  8. fn use_lock(mutex: &Mutex<Vec<i32>>,val: i32) {
  9.     let mut vec = mutex.lock().unwrap();
  10.     vec.push(val);
  11.     // lock automatically released here
  12. }
  13.  
  14. fn main() {
  15.     let data = Arc::new(Mutex::new(vec![1,2]));
  16.     let mut rng = rand::thread_rng();
  17.     let handles = (0..10).map(|x| {
  18.         let data = data.clone();
  19.         let sleepdur = Duration::from_secs(rng.gen_range(1,5));
  20.         thread::spawn(move || {
  21.             println!("Sleeping for {:?}",sleepdur);
  22.             thread::sleep(sleepdur);
  23.             use_lock(&data,x);
  24.             println!("{:?}",data);
  25.         })
  26.     });
  27.     for handle in handles {
  28.         println!("Joining");
  29.         handle.join().expect("Could not join a thread")
  30.     }
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement