Canais Delimitados
Com canais limitados e sĂncronos, send
pode bloquear a thread atual:
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 1..10 { tx.send(format!("Mensagem {i}")).unwrap(); println!("{thread_id:?}: Mensagem {i} enviada"); } println!("{thread_id:?}: terminado"); }); thread::sleep(Duration::from_millis(100)); for msg in rx.iter() { println!("Main: obteve {msg}"); } }
- Chamar
send
bloquearå a thread atual até que haja espaço no canal para a nova mensagem. A thread pode ser bloqueada indefinidamente se não houver ninguém que leia do canal. - Uma chamada para
send
serĂĄ abortada com um erro (Ă© por isso que retornaResult
) se o canal estiver fechado. Um canal Ă© fechado quando o receptor Ă© descartado. - Um canal limitado com um tamanho de zero Ă© chamado de âcanal de encontroâ. Cada envio bloquearĂĄ a thread atual atĂ© que outra thread chame
read
.