MST

星途 面试题库

面试题:Rust中线程间同步通道的基本使用

请描述如何在Rust中创建一个简单的线程间同步通道,并通过通道在两个线程之间传递一个字符串。请给出完整的代码示例,并解释代码的关键部分。
34.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::sync::mpsc;
use std::thread;

fn main() {
    // 创建通道,tx 用于发送,rx 用于接收
    let (tx, rx) = mpsc::channel();

    // 生成新线程
    let handle = thread::spawn(move || {
        let message = String::from("Hello from another thread!");
        // 发送字符串到通道
        tx.send(message).unwrap();
    });

    // 主线程从通道接收字符串
    let received = rx.recv().unwrap();
    println!("Received: {}", received);

    // 等待新线程结束
    handle.join().unwrap();
}

代码关键部分解释:

  1. 通道创建let (tx, rx) = mpsc::channel(); 创建了一个多生产者单消费者(mpsc)通道,tx 是发送端,rx 是接收端。
  2. 线程生成thread::spawn(move || { ... }) 生成一个新线程,move 关键字确保闭包获取 tx 的所有权,这样新线程才能使用 tx 发送数据。
  3. 数据发送tx.send(message).unwrap(); 在新线程中通过发送端 tx 将字符串 message 发送到通道。unwrap() 用于在发送失败时直接 panic。
  4. 数据接收let received = rx.recv().unwrap(); 在主线程中通过接收端 rx 从通道接收数据,unwrap() 同样用于在接收失败时 panic。
  5. 线程等待handle.join().unwrap(); 等待新线程执行完毕,unwrap() 用于在等待过程中出现错误时 panic。