MST

星途 面试题库

面试题:Rust多线程环境下进度报告机制基础

在Rust多线程编程中,简述使用`std::sync::mpsc`通道来构建一个简单的进度报告机制的基本步骤。假设主线程需要知道一个子线程的任务完成进度,子线程每完成10%的任务就向主线程报告一次进度。
37.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 引入必要的模块: 在Rust代码开头,引入std::sync::mpsc模块,用于创建通道。代码如下:
use std::sync::mpsc;
  1. 创建通道: 在主线程中,使用mpsc::channel()函数创建一个通道,该函数返回一个元组,包含发送端(Sender)和接收端(Receiver)。
let (tx, rx) = mpsc::channel();
  1. 创建子线程并传递发送端: 使用std::thread::spawn函数创建一个新的子线程,并将通道的发送端(tx)传递给子线程。子线程执行任务,并在每完成10%的任务时,通过发送端向主线程发送进度信息。
std::thread::spawn(move || {
    for i in 0..10 {
        // 模拟任务执行
        std::thread::sleep(std::time::Duration::from_secs(1));
        let progress = (i + 1) * 10;
        tx.send(progress).unwrap();
    }
});
  1. 主线程接收进度信息: 主线程通过通道的接收端(rx)接收子线程发送的进度信息,并进行相应处理,例如打印进度。
for _ in 0..10 {
    let progress = rx.recv().unwrap();
    println!("Received progress: {}%", progress);
}

完整代码示例:

use std::sync::mpsc;
use std::thread;
use std::time::Duration;

fn main() {
    let (tx, rx) = mpsc::channel();

    thread::spawn(move || {
        for i in 0..10 {
            std::thread::sleep(Duration::from_secs(1));
            let progress = (i + 1) * 10;
            tx.send(progress).unwrap();
        }
    });

    for _ in 0..10 {
        let progress = rx.recv().unwrap();
        println!("Received progress: {}%", progress);
    }
}