Multithreading 为什么生锈不会对螺纹产生不同的结果?

Multithreading 为什么生锈不会对螺纹产生不同的结果?,multithreading,concurrency,rust,Multithreading,Concurrency,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

对于第章中的以下示例代码

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));
}
我的朋友和我分别在铁锈操场上运行了这段代码,并且总是得到相同的顺序:
3,4,4
,因此线程似乎总是按照
2,1,0
的顺序启动

对于多线程编程,我们是否应该永远不知道哪个线程将首先启动,因为没有固定的运行派生线程的顺序?
生锈的操场被认为是一台电脑吗?

这可能不是这里唯一的游戏,但操场确实有缓存功能;如果您不更改代码,它将不会重新运行它。

这可能不是这里唯一要做的事情,但游乐场会进行缓存;如果不更改代码,它将不会重新运行它