在练习代码的同时,学习了如何在多个线程中锁定和解锁互斥锁。我使用for循环运行10个不同的线程,并启动了互斥锁计数器变量。 for循环的实际增量很好,但与互斥锁计数器不一致。
let counter = Arc::new(Mutex::new(0));
let mut handles = vec![];
for _ in 0..10 {
let counter = Arc::clone(&counter);
println!("Result: {:?}",counter);
let handle = thread::spawn(move || {
let mut num = counter.lock().unwrap();
*num += 1;
});
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
println!("Result: {}",*counter.lock().unwrap());
输出在互斥量计数器中显示了一些荒谬的结果,我需要知道为什么会发生这种情况?
Result: Mutex { data: 0 }
Result: Mutex { data: 0 }
Result: Mutex { data: 1 }
Result: Mutex { data: 2 }
Result: Mutex { data: 3 }
Result: Mutex { data: 4 }
Result: Mutex { data: 5 }
Result: Mutex { data: 6 }
Result: Mutex { data: 6 }
Result: Mutex { data: 8 }
Result: 10