为什么Rust操场不会为线程产生不同的结果?

时间:2016-12-06 20:06:56

标签: multithreading concurrency rust

以下Rust book concurrency章节中的示例代码。

use std::sync::{Arc, Mutex};
use std::thread;
use std::time::Duration;

fn main() {
    let data = Arc::new(Mutex::new(vec![1, 2, 3]));

    for i in 0..3 {
        let data = data.clone();
        thread::spawn(move || {
            let mut data = data.lock().unwrap();
            data[0] += i;
            println!("{}", data[0]);
        });
    }

    thread::sleep(Duration::from_millis(50));
}

我的朋友和我在Rust操场上分别运行了这个代码并且总是得到相同的顺序:3, 4, 4,所以看起来线程始终按2, 1, 0的顺序启动。

使用多线程编程,我们不应该知道哪个线程会首先启动,因为没有运行生成线程的固定顺序? Rust操场被认为是一台计算机吗?

1 个答案:

答案 0 :(得分:5)

这可能不是唯一在这里玩的东西,但操场上有缓存;如果你不改变代码,它就不会重新运行它。

相关问题