MST

星途 面试题库

面试题:Rust中通道与消息传递基础应用

请使用Rust的通道(channel)实现一个简单的生产者 - 消费者模型,生产者每秒生成一个随机数并发送给消费者,消费者接收并打印这个随机数。
37.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::sync::mpsc::{channel, Receiver, Sender};
use std::thread;
use std::time::Duration;
use rand::Rng;

fn main() {
    let (tx, rx): (Sender<i32>, Receiver<i32>) = channel();

    // 生产者线程
    thread::spawn(move || {
        loop {
            let num = rand::thread_rng().gen::<i32>();
            tx.send(num).unwrap();
            thread::sleep(Duration::from_secs(1));
        }
    });

    // 消费者线程
    for num in rx {
        println!("Received: {}", num);
    }
}
  1. 通道创建
    • 使用std::sync::mpsc::channel创建一个通道,tx是发送端,rx是接收端。
  2. 生产者线程
    • thread::spawn创建一个新线程,在这个线程中,使用rand::thread_rng().gen::<i32>()生成一个随机数,然后通过tx.send(num)将随机数发送到通道中,接着线程休眠1秒。
  3. 消费者线程
    • 在主线程中,通过for num in rx循环接收通道中的数据,并打印出来。这里rx实现了Iterator trait,所以可以直接在for循环中使用。

注意,需要在Cargo.toml文件中添加rand依赖:

[dependencies]
rand = "0.8.5"