multithreading - 在多线程中使用没有 Arc 的 Mutex 是否安全?

标签 multithreading rust

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/

相关文章:

macros - 匹配 nom 中的几个字节之一

rust - `Rc`、 `Box`、 `Arc` 的通用指针类型

string - 如何查找字符串中最后一次出现的字符?

python - 脚本中的线程在 IDLE 中工作,但不能通过 Ubuntu 命令行

rust - 什么是非词汇生命周期?

Java 和 MongoDB 线程

java - Notify 和 NotifyAll 仅影响处于阻塞状态的线程

vector - 实现二维向量语法以访问一维向量?

java - 如何在Java中同时计算近似值?

c - 在多线程程序中,malloc() 被独占锁定