对于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));
}
我和我的 friend 分别在 Rust playground 上运行这段代码,并且总是得到相同的顺序:3, 4, 4
,所以似乎线程总是按照 的顺序启动2, 1, 0
。
对于多线程编程,我们不应该永远不知道哪个线程会先启动,因为没有固定的运行衍生线程的顺序吗? Rust Playground 是否被视为一台计算机?
最佳答案
这可能不是这里唯一起作用的东西,但 playground 会缓存;如果您不更改代码,它不会重新运行它。
关于multithreading - 为什么 Rust playground 不会为线程产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41003914/