Dev Study
Rust コース

49. チャネル — スレッド間でデータを送る

mpsc::channel() は送信機 tx と受信機 rx のペアを作り、tx.send(値) で送ったデータを別スレッドの rx で受け取れます。値は所有権ごと送られるので、送信側はその後その値に触れません。「メモリを共有して通信するのではなく、通信してデータを共有する」というのがチャネルの考え方です。

ワーカースレッドに計算させて結果をメインに集める、といった役割分担で使います。rx は for 式でそのまま回すことができ、すべての送信機が drop されるとループが自然に終わります。mpsc(multiple producer, single consumer)の名前のとおり、tx は clone して複数のスレッドから送ることもできます。

下の例では受け取った値の合計を表示しています。この例の到着順は一定ですが、送信側のスレッドが複数になると到着順は実行ごとに変わるため、順序に依存しない集計(合計など)にするのが安全です。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Rust
サンプルコードで身につける(5本) →

学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。

公式ドキュメントで詳しく ↗