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

ena*_*naJ 1 concurrency multithreading rust

有关Rust书籍并发章节中的以下示例代码.

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));
}
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*nik 5

这可能不是这里唯一可以玩的东西,但是游乐场会缓存; 如果您不更改代码,它将不会重新运行它.