rust_learning/deadlocks/src/main.rs

33 lines
907 B
Rust

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);
}