MST

星途 面试题库

面试题:Rust中作用域线程的基本原理及简单应用

请阐述Rust中作用域线程(scoped threads)的基本原理。并编写一段简单代码,利用作用域线程来并行计算1到100的整数之和,最后输出结果。
14.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

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创建了一个作用域,在此作用域内创建了两个线程handle1handle2。每个线程分别计算1到50和51到100的整数之和,最后将两个结果相加并输出。这样通过作用域线程实现了并行计算1到100的整数之和。