gpt4 book ai didi

multithreading - 如何在不复制的情况下将相同的数据传递给不同的线程?

转载 作者:行者123 更新时间:2023-11-29 08:10:41 25 4
gpt4 key购买 nike

Struct S 实际上可能是一些大数据,例如一个大的Vec。如果我有一个线程并且在创建线程后不使用数据,我可以将数据移动到它,但是对于两个线程(或者在主线程中使用相同的数据),这是不可能的。

struct S {
i : i32,
}

fn thr(s : &S)
{
}

fn main()
{
let s1 = S { i:1 };
thr(&s1);
let t1 = std::thread::spawn(|| thr(&s1)); // does not work
let t2 = std::thread::spawn(|| thr(&s1)); // does not work
t1.join();
t2.join();
}

最佳答案

强烈推荐阅读 The Rust Programming Language ,特别是 chapter on concurrency .在其中,您被介绍给Arc :

use std::sync::Arc;

struct S {
i: i32,
}

fn thr(s: &S) {}

fn main() {
let s1 = Arc::new(S { i: 1 });
thr(&s1);

let s2 = s1.clone();
let t2 = std::thread::spawn(move || thr(&s2));

let s3 = s1.clone();
let t3 = std::thread::spawn(move || thr(&s3));

t2.join();
t3.join();
}

值得注意的是,当 Arc 被克隆时,它们只是增加了一个引用计数,而不是复制包含的数据。

关于multithreading - 如何在不复制的情况下将相同的数据传递给不同的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30279919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com