問題一覧に戻る
上級並行性
問題87: メッセージパッシング

メッセージパッシングはRustが推奨する並行性アプローチです:「メモリを共有して通信するのではなく、通信してメモリを共有する」。mpsc(複数生産者、単一消費者)チャネルはスレッド間で安全にメッセージを送信します。所有権はチャネルを通じて移動し、スレッド安全性を保証。受信者は全送信者がドロップされるまでメッセージを反復処理できます。

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

fn main() {
// チャネルを作成
let (tx, rx) = mpsc::();

// 送信側スレッド
thread::spawn(move || {
let msg = String::from("Hello");
tx.(msg).unwrap();
});

// メッセージを受信
let received = rx.().unwrap();
println!("Got: {}", received);

// 複数の送信者
let (tx, rx) = mpsc::channel();
let tx2 = tx.();

thread::spawn(move || {
tx.send(1).unwrap();
tx.send(2).unwrap();
});

thread::spawn(move || {
tx2.send(3).unwrap();
tx2.send(4).unwrap();
});

// 全て受信
for val in {
println!("Received: {}", val);
}
}