2016-12-06 67 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

这可能不是唯一的东西,但操场确实缓存;如果你不更改代码,它将不会重新运行它。

相关问题