Rust 程式設計中的通道


通道是一種允許在兩個或多個執行緒之間進行通訊的媒介。Rust 提供非同步通道,以實現執行緒之間的通訊。

Rust 中的通道允許在兩個端點之間進行單向通訊。這兩個端點是傳送方接收方。

示例

考慮如下所示的示例 −

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 stopped working");
   }
   println!("{:?}", ids);
}

在上方的程式碼中,我們試圖透過一個通道將執行緒的 id 傳遞到另一個執行緒。

輸出

當我們執行上述程式碼時,我們會看到以下輸出

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

該輸出表明所有執行緒都完美工作,並且能夠透過通道在它們之間實現通訊。

更新於: 2021 年 4 月 3 日

628 次瀏覽

職業生涯起步

完成本課程後獲得認證

立即開始
廣告
© . All rights reserved.