lazy_static! { pub static ref A: Mutex<Vec<u8>> = Mutex::new(vec![]); } #[test] fn test() { let mut handles = vec![]; for _ in 0..100 { let handle = thread::spawn(|| for _ in 0..10000 { A.lock().unwrap().push(1); }); handles.push(handle); } for handle in handles { handle.join().unwrap(); } println!("{}", A.lock().unwrap().len()); }
我得到了输出 1000000 但我不确定这是一个正确的方法来收集 data 在多线程中。
1000000
data
我应该把它换成 Arc<Mutex<_>> ?
Arc<Mutex<_>>
这是安全的,是的。多线程正是互斥锁的作用。 Arc 这里什么都不给你。
Arc
当然,请注意,您当前的代码效率极低。我希望您的实际用例能够在互斥锁之间做更多的工作。