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
的正确方法。
我应该将其更改为Arc<Mutex<_>>
吗?
答案 0 :(得分:1)
这是安全的,是的。多线程正是互斥的目的。 Arc
不能满足您的任何需求。
当然,请注意,您当前的代码效率极低。希望您的实际用例在互斥锁之间做的工作比这更多。