Multithreading Future::spawn()有点没用?我怎样才能多线程处理这个问题?

Multithreading Future::spawn()有点没用?我怎样才能多线程处理这个问题?,multithreading,rust,Multithreading,Rust,摘自main此处: let value: Value = json::from_str(&sbuf).unwrap(); let coords = value.find("coordinates").unwrap().as_array().unwrap(); let x = Future::spawn(|| coords.iter().fold(0f64, |mut a,b| { a += read_coord_value(&b, "x"); a })); let y = Fut

摘自
main
此处:

let value: Value = json::from_str(&sbuf).unwrap();
let coords = value.find("coordinates").unwrap().as_array().unwrap();
let x = Future::spawn(|| coords.iter().fold(0f64, |mut a,b| { a += read_coord_value(&b, "x"); a }));
let y = Future::spawn(|| coords.iter().fold(0f64, |mut a,b| { a += read_coord_value(&b, "y"); a }));
let z = Future::spawn(|| coords.iter().fold(0f64, |mut a,b| { a += read_coord_value(&b, "z"); a }));

println!("x: {}; y: {}; z: {}",
         x.await().unwrap(),
         y.await().unwrap(),
         z.await().unwrap());
所以,基本上,我在这里所做的不会起作用,因为这个spawn调用需要传递给它的所有东西都有一个静态生存期——这意味着基本上没有我可以避免重复的工作。完全毫无意义


在这里,什么是执行线程的好方法?

在这里,要正确执行多线程,您需要使用作用域线程和

这些线程不需要执行静态闭包,但它们必须连接起来

例如:

use std::thread::scoped;

fn main() {
    let coords = [(1f64,2f64,3f64),(1.,2.,3.),(1.,2.,3.),(1.,2.,3.)];
    let x = scoped(|| coords.iter().fold(0f64, |mut a,b| { a += b.0; a }));
    let y = scoped(|| coords.iter().fold(0f64, |mut a,b| { a += b.1; a }));
    let z = scoped(|| coords.iter().fold(0f64, |mut a,b| { a += b.2; a }));

    println!("x: {}; y: {}; z: {}",
             x.join(),
             y.join(),
             z.join());
}

具体地说,它们必须在捕获变量的生存期到期之前加入。