【发布时间】:2018-05-17 14:21:44
【问题描述】:
我正在尝试生成几个新线程,每个线程都有自己的某些状态的副本。我想要的是这样的:
use std::thread;
fn main() {
let data = vec![42; 10];
let more_data = "Important data".to_string();
for _ in 1..=4 {
thread::spawn(|| foo(data.clone(), more_data.clone()));
}
}
fn foo(_data: Vec<u64>, _more_data: String) {}
这不会编译,因为克隆是在新线程上完成的,这可能会比主线程长。很公平,但似乎没有好的方法告诉 Rust 在主线程上进行克隆,然后然后将所有权转移到新线程。每当我遇到这个问题时,我都会这样做:
use std::thread;
fn main() {
let data = vec![42; 10];
let more_data = "Important data".to_string();
for _ in 1..=4 {
let cloned_data = data.clone();
let cloned_more_data = more_data.clone();
thread::spawn(move || foo(cloned_data, cloned_more_data));
}
}
fn foo(_data: Vec<u64>, _more_data: String) {}
它可以满足我的要求,但它非常嘈杂和样板,尤其是有很多争论。有没有更好的办法?
【问题讨论】:
标签: rust