チャネル

Rustのチャネルには二つの部品があります: Sender<T>Receiver<T>です。この2つの部品はチャネルによって繋がっていますが、見ることができるのはエンドポイントだけです。

use std::sync::mpsc;

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 は Multi-Producer, Single-Consumerの略称です。 SenderSyncSenderCloneを実装している(よって複数のproducerが作成可能)のですが、Receiverについてはそうではありません。
  • send()recv()Resultを返します。もしErrが返された場合、これは、対応するSenderReceiverのいずれかがドロップされ、チャンネルが閉じられたことを意味します。