Метод clone класса Sender
Метод clone класса Sender создаёт
копию отправителя. Полученный клон можно
передать в другой поток, при этом он будет
связан с тем же самым каналом, что и
исходный отправитель. Параметров метод
не принимает и возвращает новый экземпляр
Sender.
Клонирование Sender позволяет нескольким
потокам одновременно отправлять сообщения
в один и тот же канал. Когда все отправители,
включая клоны, будут удалены, канал закроется,
и получатель завершит работу.
Синтаксис
sender.clone()
Пример
Давайте создадим канал, клонируем отправителя и отправим сообщения из двух разных потоков:
use std::sync::mpsc;
use std::thread;
fn main()
{
let (tx, rx) = mpsc::channel();
let tx2 = tx.clone();
thread::spawn(move || {
tx.send("abcde").unwrap();
});
thread::spawn(move || {
tx2.send("12345").unwrap();
});
for _ in 0..2 {
let res = rx.recv().unwrap();
println!("{}", res);
}
}
Результат выполнения кода:
"abcde"
"12345"
Пример
Давайте проверим, что после удаления исходного отправителя клон продолжает работать:
use std::sync::mpsc;
use std::thread;
fn main()
{
let (tx, rx) = mpsc::channel();
let tx2 = tx.clone();
drop(tx);
thread::spawn(move || {
tx2.send("abcde").unwrap();
});
let res = rx.recv().unwrap();
println!("{}", res);
}
Результат выполнения кода:
"abcde"