文章阅读
Rust线程入门
2025/12/1674 次阅读2 分钟
注意事项:
- 主线程不会等待线程任务完成,需要使用
join函数来实现 - 线程中不能借用主线程中的值,需要使用
scope范围线程来实现
use std::thread;
use std::thread::scope;
use std::time::Duration;
fn main() {
let handle = thread::spawn(|| {
for i in 1..10 {
println!("线程中执行: {i}!");
thread::sleep(Duration::from_millis(5));
}
});
for i in 1..5 {
println!("主线程中执行: {i}");
thread::sleep(Duration::from_millis(5));
}
handle.join().unwrap(); //等待线程中执行完毕,默认是不会等待线程中任务完成的,会在打印10之前就结束主线程
//foo();
foo2();
}
//要注释,否则编译不通过
fn foo(){
let s = String::from("Hello");
thread::spawn(|| {
println!("Length:{}",s.len()); //这里会报错,不能在线程中借用主线程环境中的值,下面可以使用范围线程来实现这个目的
});
}
//范围线程来解决上面的问题
fn foo2(){
let s= String::from("Hello");
thread::scope(|scope| {
scope.spawn(||{
println!("Length: {}",s.len());
});
});
}
