Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern crate rand;
- use std::sync::{Arc,Mutex};
- use std::thread;
- use std::time::{Duration};
- use rand::Rng;
- fn use_lock(mutex: &Mutex<Vec<i32>>,val: i32) {
- let mut vec = mutex.lock().unwrap();
- vec.push(val);
- // lock automatically released here
- }
- fn main() {
- let data = Arc::new(Mutex::new(vec![1,2]));
- let mut rng = rand::thread_rng();
- let handles = (0..10).map(|x| {
- let data = data.clone();
- let sleepdur = Duration::from_secs(rng.gen_range(1,5));
- thread::spawn(move || {
- println!("Sleeping for {:?}",sleepdur);
- thread::sleep(sleepdur);
- use_lock(&data,x);
- println!("{:?}",data);
- })
- });
- for handle in handles {
- println!("Joining");
- handle.join().expect("Could not join a thread")
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement