🧀 Rust多线程中的生命周期
1
2
3
4
5
6
7
8
9
10
11
use std::thread;
fn main(){
let v = vec![1,2,3];
let handle = thread::spawn(||{
println!("here's a vector:{:?}",v);
});
handle.join().unwrap();
}
这里因为 println!()
函数只需要 v 的引用,如果只是单线程的话,完全没有任何问题。
而一看到引用,就要想到谁是 本体, 本体获得够不够久
而现在因为这段代码跑在不同的线程上,这就导致了一个问题,就是引用本体,v会不会提前嗝屁了。
虽然这里我们直观看,是没有的,因为用了 join()
去等待,
但是Rust并不知道,或者说 不好推断
如果是这样
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use std::thread;
fn main() {
let v = vec![1, 2, 3];
let handle = thread::spawn(|| {
println!("Here's a vector: {:?}", v);
});
drop(v); // oh no!
handle.join().unwrap();
}
那就会出问题了
This post is licensed under CC BY 4.0 by the author.