From 9baeb7e55b983194b71a3da670395d1301abd3f9 Mon Sep 17 00:00:00 2001 From: Abrar Habib Date: Mon, 8 May 2023 23:19:31 -0400 Subject: [PATCH] somewhere in threads now --- exercises/threads/threads2.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/exercises/threads/threads2.rs b/exercises/threads/threads2.rs index ada3d14a..6e39c4b2 100644 --- a/exercises/threads/threads2.rs +++ b/exercises/threads/threads2.rs @@ -3,9 +3,7 @@ // Building on the last exercise, we want all of the threads to complete their work but this time // the spawned threads need to be in charge of updating a shared value: JobStatus.jobs_completed -// I AM NOT DONE - -use std::sync::Arc; +use std::sync::{Arc, Mutex}; use std::thread; use std::time::Duration; @@ -14,14 +12,15 @@ struct JobStatus { } fn main() { - let status = Arc::new(JobStatus { jobs_completed: 0 }); + let status = Arc::new(Mutex::new(JobStatus { jobs_completed: 0 })); let mut handles = vec![]; for _ in 0..10 { let status_shared = Arc::clone(&status); let handle = thread::spawn(move || { thread::sleep(Duration::from_millis(250)); // TODO: You must take an action before you update a shared value - status_shared.jobs_completed += 1; + let mut shared_stat = status_shared.lock().unwrap(); + shared_stat.jobs_completed += 1; }); handles.push(handle); } @@ -29,6 +28,6 @@ fn main() { handle.join().unwrap(); // TODO: Print the value of the JobStatus.jobs_completed. Did you notice anything // interesting in the output? Do you have to 'join' on all the handles? - println!("jobs completed {}", ???); + println!("jobs completed {:?}", status.lock().unwrap().jobs_completed); } }