Rust の重要トピック

Rust Channels: mpsc

Send messages from one thread to another instead of sharing memory.

  • 上級
  • 約2分で読めます
  • 実行できるサンプル 1 件
学べること
  • mpsc::channel
  • send and receive
  • How a channel closes
Producer to main
  1. 1sender.sendproducer thread
  2. 2channelstep 1, step 2, step 3
  3. 3for message in receivermain thread

A one-way pipe between threads

A channel is a one-way pipe between threads. One side sends values and the other receives them, so threads can work together without sharing memory.

channel returns a sender and a receiver. The producer thread owns the sender and sends three messages. When the thread ends, the sender is dropped and the channel closes, which ends the for loop over the receiver.

重要なポイント

  1. channel() returns a sender and a receiver.
  2. The receiver can be used in a for loop.
  3. Dropping the sender closes the channel.

実行できる Rust のサンプル

Rust
コードを実行 →
main.rs
use std::sync::mpsc;
use std::thread;

fn main() {
    let (sender, receiver) = mpsc::channel();

    let producer = thread::spawn(move || {
        for step in 1..=3 {
            sender.send(format!("step {step} done")).unwrap();
        }
    }); // sender is dropped here, which closes the channel

    for message in receiver {
        println!("received: {message}");
    }
    producer.join().unwrap();
    println!("all messages received");
}
この例の実行ボタンを作成 実行結果
received: step 1 done
received: step 2 done
received: step 3 done
all messages received

練習

サンプルをオンラインコンパイラーで開き、値を変えたり行を追加したりして、実行する前に出力を予想してみましょう。次に、わざとコードを壊してコンパイラーのメッセージを読んでみてください。

このレッスンを終えましたか?

学習済みにすると進み具合を記録できます。

チャレンジで練習する

このレッスンの内容を使って実際の問題を解きましょう。各チャレンジはブラウザで動き、すぐにテストされ、AI のレビューも受けられます。

すべてのチャレンジ