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

Функция sync_channel

Функция sync_channel создаёт синхронный канал, через который один поток может передавать значения другому потоку. В отличие от обычного канала channel, синхронный канал имеет ограниченный буфер заданного размера. Функция принимает один параметр - целое число bound, которое задаёт ёмкость буфера канала. Если буфер заполнен, отправляющий поток блокируется до тех пор, пока получатель не прочитает хотя бы одно значение. Функция возвращает кортеж из двух элементов: SyncSender для отправки значений и Receiver для их приёма.

Синтаксис

std::sync::mpsc::sync_channel(bound)

Пример

Давайте создадим синхронный канал с буфером размером 2 и отправим через него несколько чисел из дочернего потока:

use std::sync::mpsc::sync_channel; use std::thread; fn main() { let (tx, rx) = sync_channel(2); thread::spawn(move || { tx.send(1).unwrap(); tx.send(2).unwrap(); tx.send(3).unwrap(); }); for val in rx { println!("{}", val); } }

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

1 2 3

Пример

Давайте создадим синхронный канал с нулевым буфером 0. Такой канал работает как рандеву: отправляющий поток блокируется до тех пор, пока получатель не вызовет recv:

use std::sync::mpsc::sync_channel; use std::thread; fn main() { let (tx, rx) = sync_channel(0); thread::spawn(move || { tx.send("abcde").unwrap(); }); let res = rx.recv().unwrap(); println!("{}", res); }

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

"abcde"

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

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