1
次のサンプルコードは、Rust book 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 mut data = data.lock().unwrap();
data[0] += i;
println!("{}", data[0]);
});
}
thread::sleep(Duration::from_millis(50));
}
私の友人と私は別に錆の遊び場にこのコードを実行し、常に同じ順番だ:3, 4, 4
をので、スレッドは常に2, 1, 0
の順序で開始されているようです。
マルチスレッドプログラミングでは、生成されたスレッドを実行する順序が固定されていないため、最初にどのスレッドが最初に起動するかわからないはずです。 錆の遊び場は1台のコンピュータと考えられていますか?