2016-12-06 66 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的順序啓動。

對於多線程編程,我們不應該永遠不知道哪個線程將首先啓動,因爲沒有固定的運行產生的線程的順序? Rust是否被認爲是一臺計算機?

回答

5

這可能不是唯一的東西,但操場確實緩存;如果你不更改代碼,它將不會重新運行它。

相關問題