以下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操场被认为是一台计算机吗?
答案 0 :(得分:5)
这可能不是唯一在这里玩的东西,但操场上有缓存;如果你不改变代码,它就不会重新运行它。