use std::sync::{Arc, Mutex}; use std::thread; use std::time::Duration; fn main() { let counter = Arc::new(Mutex::new(0)); let mut handles = vec![]; for i in 0..5 { let counter_clone = Arc::clone(&counter); let handle = thread::spawn(move || { let mut num = counter_clone.lock().unwrap(); *num += 1; println!("Thread {} incremented counter to: {}", i, *num); // Simulate some work thread::sleep(Duration::from_millis(50)); }); handles.push(handle); } for handle in handles { handle.join().unwrap(); } println!("Final counter value: {}", *counter.lock().unwrap()); }