有界チャネル
有界(同期)チャネルでは、send() が現在のスレッドをブロックすることがあります:
// Copyright 2022 Google LLC // SPDX-License-Identifier: Apache-2.0 use std::sync::mpsc; use std::thread; use std::time::Duration; fn main() { let (tx, rx) = mpsc::sync_channel(3); thread::spawn(move || { let thread_id = thread::current().id(); for i in 0..10 { tx.send(format!("Message {i}")).unwrap(); println!("{thread_id:?}: sent Message {i}"); } println!("{thread_id:?}: done"); }); thread::sleep(Duration::from_millis(100)); for msg in rx { println!("Main: got {msg}"); } }
send()を呼び出すと、新しいメッセージを入れる空きがチャネルに できるまで、現在のスレッドはブロックされます。チャネルから 読み取るものが誰もいない場合、スレッドは無期限にブロックされる可能性が あります。- 無界チャネルと同様に、チャネルが閉じられている場合、
send()の 呼び出しはエラーを返して失敗します。 - サイズが 0 の有界チャネルは「ランデブーチャネル」と呼ばれます。すべての 送信は、別のスレッドが
recv()を呼び出すまで、現在のスレッドをブロックします。