Каналы
Канал считается закрытым , если либо передающая, либо принимающая его половина уничтожена.
Библиотека use std::sync::mpsc;
use std::sync::mpsc; fn main() { let (tx, rx) = mpsc::channel(); }
mpscозначает несколько производителей, один потребитель (multiple producer, single consumer).
use std::sync::mpsc; use std::thread; fn main() { let (tx, rx) = mpsc::channel(); //создали канал с приемником и передатчиком thread::spawn(move || { //создали поток и передали в него tx let val = String::from("hi"); tx.send(val).unwrap(); //отправили сообщение в канал }); let received = rx.recv().unwrap(); //получили сообщение из канала println!("Got: {received}"); }
try_recv— ждет поступления в канал и не блокирует потокrecv— блокирует поток до получения сообщения
Получение через итератор
#![allow(unused)] fn main() { for received in rx { println!("Got: {received}"); } }
Будет получать пока не закроется канал
передатчики можно клонировать
let tx1 = tx.clone();
создавать новые потоки и запускать отправку в канал