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<_>>
吗? ?
最佳答案
这是安全的,是的。多线程正是互斥锁的用途。 Arc
没有提供您在这里需要的任何东西。
当然,请注意,您当前的代码效率极低。我希望您的实际用例在互斥锁之间做的工作比这多得多。
关于multithreading - 在多线程中使用没有 Arc 的 Mutex 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53409879/