通道

Rust 通道分為兩個部分:Sender<T> 和 Receiver<T>。這兩個部分 透過通道相連,但你只能看到端點。

use std::sync::mpsc;
use std::thread;

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

    tx.send(10).unwrap();
    tx.send(20).unwrap();

    println!("Received: {:?}", rx.recv());
    println!("Received: {:?}", rx.recv());

    let tx2 = tx.clone();
    tx2.send(30).unwrap();
    println!("Received: {:?}", rx.recv());
}
  • mpsc 代表多重生產者、唯一消費者。Sender 和 SyncSender 會實作 Clone (用於製作多重生產者),但 Receiver 不會。
  • send() 和 recv() 會傳回 Result。如果傳回的是 Err,表示對應的 Sender 或 Receiver 已釋放,且通道已關閉。