use std::sync::{Arc, Mutex}; use std::thread; use std::time::Duration; fn main() { let mutex1 = Arc::new(Mutex::new(0)); let mutex2 = Arc::new(Mutex::new(0)); let mutex3 = Arc::clone(&mutex1); let mutex4 = Arc::clone(&mutex2); let mutex5 = Arc::clone(&mutex1); let mutex6 = Arc::clone(&mutex2); let handle1 = thread::spawn(move || { let mut num1 = mutex1.lock().unwrap(); *num1 = 1; thread::sleep(Duration::from_secs(1)); let mut num2 = mutex2.lock().unwrap(); *num2 = 22; }); let handle2 = thread::spawn(move || { let mut num2 = mutex4.lock().unwrap(); *num2 = 2; thread::sleep(Duration::from_secs(1)); let mut num1 = mutex3.lock().unwrap(); *num1 = 11; }); handle1.join().unwrap(); handle2.join().unwrap(); println!("mutex1: {:?}, mutex2: {:?}", mutex5, mutex6); }