use std::thread;
fn main() {
let v = vec![1, 2, 3];
let mut handles = Vec::new();
for i in 0..3 {
let separated_vec_clone = &v;
handles.push(thread::spawn(move || {
let data = separated_vec_clone.get(i).unwrap();
}));
}
for handle in handles {
handle.join().unwrap();
}
}
各位老师,上面的代码我希望通过多线程去对vec进行一些操作,但是会得到错误说"v
does not live long enough"。这里我不是很明白,v的生命周期明明是到main函数结束的,并且我尝试使用Arc解决这个错误,依然会有这个错误。能否麻烦大佬说明一下问题在什么地方,谢谢。
首先 Arc 应该是可以解决你的问题的,代码如下
关键在于使用 clone 而不是 borrow(借用)。
然后解释一下你说的 v 生命周期是到 main 结束的地方。我的理解是 rust 编译器应该没法推导(保证) v 在外面能活多久。