РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1058 of 1245 menu

Метод 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"

Смотрите также

  • класс Sender,
    который представляет отправляющую часть канала
  • метод send,
    который отправляет значение в канал
  • класс Receiver,
    который представляет принимающую часть канала
  • функция channel,
    которая создаёт асинхронный канал
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить