multithreading - 为什么 Rust playground 不会为线程产生不同的结果?

标签 multithreading concurrency rust

对于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));
}

我和我的 friend 分别在 Rust playground 上运行这段代码,并且总是得到相同的顺序:3, 4, 4,所以似乎线程总是按照 的顺序启动2, 1, 0

对于多线程编程,我们不应该永远不知道哪个线程会先启动,因为没有固定的运行衍生线程的顺序吗? Rust Playground 是否被视为一台计算机?

最佳答案

这可能不是这里唯一起作用的东西,但 playground 会缓存;如果您不更改代码,它不会重新运行它。

关于multithreading - 为什么 Rust playground 不会为线程产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41003914/

相关文章:

java - LinkedHashMap 的这个包装线程安全吗?如果不是,它怎么能成为线程安全的呢?

c - 多终端多用户应用

rust - 我的变量的生命周期是否由于添加了明显不相关的指令而发生变化?

iterator - 共享借用的 Vec 上 iter() 和 into_iter() 的区别?

iphone - PerformselectorinBackground 不起作用

android - 中断 HttpURLConnection 请求 Android

c - 给定两个线程并行运行时,变量的可能值是多少?

c# - 并发调用时可以等待损坏值

java - 我的自定义异步任务是否应该同步访问传递给构造函数的内容?

rust - 使用 Elixir 通过 Ports 与 Rust 对话,我哪里出错了?