Rust 编程中的通道

rust programmingserver side programmingprogramming

通道是一种允许两个或多个线程之间进行通信的媒介。Rust 提供异步通道,可实现线程之间的通信。

Rust 中的通道允许两个端点之间进行单向通信。这两个端点是 SenderReceiver。

示例

请考虑下面显示的示例 −

use std::sync::mpsc::{Sender, Receiver};
use std::sync::mpsc;
use std::thread;

static NTHREADS: i32 = 3;

fn main() {
   let (tx, rx): (Sender, Receiver) = mpsc::channel();
   let mut children = Vec::new();
   for id in 0..NTHREADS {
      let thread_tx = tx.clone();
      let child = thread::spawn(move || {
         thread_tx.send(id).unwrap();
         println!("thread {} done", id);
      });
      children.push(child);
   }
   let mut ids = Vec::with_capacity(NTHREADS as usize);
   for _ in 0..NTHREADS {
      ids.push(rx.recv());
   }
   for child in children {
      child.join().expect("oops! the child thread ceases working");
   }
   println!("{:?}", ids);
}

在上面的代码中,我们尝试通过通道将线程的 id 传递给另一个线程。

输出

当我们运行上面的代码时,我们将看到以下输出:

thread 0 done
thread 1 done
thread 2 done
[Ok(0), Ok(1), Ok(2)]

输出意味着所有线程都运行正常,并且通过通道在它们之间启用了通信。


相关文章