代码之家  ›  专栏  ›  技术社区  ›  AurevoirXavier

在多线程中使用不带ARC的互斥体是否安全?

  •  0
  • AurevoirXavier  · 技术社区  · 7 年前
    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<_>> ?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Sebastian Redl    7 年前

    这是安全的,是的。多线程正是互斥锁的作用。 Arc 这里什么都不给你。

    当然,请注意,您当前的代码效率极低。我希望您的实际用例能够在互斥锁之间做更多的工作。

    推荐文章