Функция 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]