面试题答案
一键面试Rust中作用域线程基本原理
作用域线程(scoped threads)是Rust 1.63.0引入的新特性,它允许线程借用外部作用域的变量,而无需将变量所有权转移到线程中。这是通过scoped
函数实现,scoped
函数创建的线程生命周期与创建它的作用域相关联,不会超过这个作用域,使得在该作用域结束时,线程能安全地清理资源。这种机制保证了线程安全地使用外部变量,并且避免了悬垂引用问题,因为线程不会在其借用的变量销毁后继续存活。
代码实现
use std::thread;
fn main() {
let sum: i32;
thread::scope(|s| {
let handle1 = s.spawn(|| {
(1..51).sum::<i32>()
});
let handle2 = s.spawn(|| {
(51..101).sum::<i32>()
});
sum = handle1.join().unwrap() + handle2.join().unwrap();
});
println!("1到100的整数之和为: {}", sum);
}
在这段代码中,thread::scope
创建了一个作用域,在此作用域内创建了两个线程handle1
和handle2
。每个线程分别计算1到50和51到100的整数之和,最后将两个结果相加并输出。这样通过作用域线程实现了并行计算1到100的整数之和。