2016-12-06 5 views
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台のコンピュータと考えられていますか?

答えて

5

これはここでプレーする唯一のものではないかもしれませんが、プレイグラウンドはキャッシュします。コードを変更しないと、コードは再実行されません。

関連する問題