首页 > 解决方案 > 如何在线程中借值而不是移动

问题描述

我有两个线程都需要对 Vec 进行不可变访问,目前我必须克隆该向量以便两个线程都可以使用数据,我想尝试摆脱这个额外的副本

use clap::{App, Arg};
use std::fs;
use std::thread;

mod part1;
mod part2;

fn main() {
    let matches = App::new("day1")
        .about("AoC2018 day1")
        .arg(
            Arg::with_name("INPUT")
                .help("The file to read input from")
                .required(true)
                .index(1),
        )
        .get_matches();

    let filename = matches.value_of("INPUT").unwrap();
    let file_content = fs::read_to_string(filename).expect("Could not read/open file");

    let numbers: Vec<i64> = file_content
        .lines()
        .map(|x| x.parse::<i64>().expect("Could not extract value"))
        .collect();
    let numbers2 = numbers.clone();

    let handle1 = thread::spawn(move || part1::part1(&numbers));

    let handle2 = thread::spawn(move || part2::part2(&numbers2));

    let result1 = handle1.join();
    let result2 = handle2.join();

    println!("Part 1: {}", result1.unwrap());
    println!("Part 2: {}", result2.unwrap());
}

标签: rust

解决方案


推荐阅读