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

Функция channel

Функция channel создаёт канал передачи данных для обмена сообщениями между потоками. Она возвращает кортеж из двух элементов: отправителя Sender и получателя Receiver. Параметров функция не принимает.

Отправитель используется для отправки данных в канал с помощью метода send, а получатель - для их приёма с помощью методов recv или try_recv. Когда все отправители удалены из памяти, канал закрывается, и получатель узнаёт об окончании потока данных.

Синтаксис

std::sync::mpsc::channel::<T>()

Пример

Давайте создадим канал, отправим в него строку "abcde" и получим её на другом конце:

use std::sync::mpsc; fn main() { let (tx, rx) = mpsc::channel(); tx.send("abcde").unwrap(); let res = rx.recv().unwrap(); println!("{}", res); }

Результат выполнения кода:

"abcde"

Пример

Давайте отправим в канал несколько чисел и прочитаем их все через цикл:

use std::sync::mpsc; fn main() { let (tx, rx) = mpsc::channel(); tx.send(1).unwrap(); tx.send(2).unwrap(); tx.send(3).unwrap(); for res in rx { println!("{}", res); } }

Результат выполнения кода:

1 2 3

Пример

Давайте создадим отправителя в отдельном потоке и передадим через канал вектор:

use std::sync::mpsc; use std::thread; fn main() { let (tx, rx) = mpsc::channel(); thread::spawn(move || { let data = vec![1, 2, 3, 4, 5]; tx.send(data).unwrap(); }); let res = rx.recv().unwrap(); println!("{:?}", res); }

Результат выполнения кода:

[1, 2, 3, 4, 5]

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

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