Безопасно ли использовать Mutex без дуги в многопоточности? - PullRequest
0 голосов
/ 21 ноября 2018
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 Ответ

0 голосов
/ 21 ноября 2018

Это безопасно, да.Многопоточность - это именно то, для чего нужны мьютексы.Arc не дает вам ничего, что вам нужно.

Обратите внимание, конечно, что ваш текущий код ужасно неэффективен.Я надеюсь, что ваш реальный вариант использования намного больше работает между блокировками мьютекса, чем этот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...