Avoid deadlocks in Rust by enforcing a consistent lock acquisition order across all threads to prevent circular wait conditions. Use std::sync::Mutex with a defined hierarchy, ensuring every thread acquires locks in the same sequence before accessing shared data.
use std::sync::{Mutex, Arc};
use std::thread;
fn main() {
let data1 = Arc::new(Mutex::new(10));
let data2 = Arc::new(Mutex::new(20));
let d1_clone = Arc::clone(&data1);
let d2_clone = Arc::clone(&data2);
let handle1 = thread::spawn(move || {
let mut n1 = d1_clone.lock().unwrap();
let mut n2 = d2_clone.lock().unwrap();
*n1 += *n2;
});
let d1_clone = Arc::clone(&data1);
let d2_clone = Arc::clone(&data2);
let handle2 = thread::spawn(move || {
let mut n1 = d1_clone.lock().unwrap();
let mut n2 = d2_clone.lock().unwrap();
*n2 += *n1;
});
handle1.join().unwrap();
handle2.join().unwrap();
}