【发布时间】:2015-07-31 13:56:03
【问题描述】:
我正在从文件中读取一个字符串,将其按行拆分为一个向量,然后我想在单独的线程中对提取的行做一些事情。像这样:
use std::fs::File;
use std::io::prelude::*;
use std::thread;
fn main() {
match File::open("data") {
Ok(mut result) => {
let mut s = String::new();
result.read_to_string(&mut s);
let k : Vec<_> = s.split("\n").collect();
for line in k {
thread::spawn(move || {
println!("nL: {:?}", line);
});
}
}
Err(err) => {
println!("Error {:?}",err);
}
}
}
当然这会引发错误,因为s 在线程启动之前会超出范围:
s` does not live long enough
main.rs:9 let k : Vec<_> = s.split("\n").collect();
^
我现在能做什么?我已经尝试了很多东西,比如Box 或Arc,但我无法让它工作。我不知何故需要创建一个s 的副本,它也存在于线程中。但是我该怎么做呢?
【问题讨论】:
标签: multithreading rust lifetime