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

Класс SyncSender

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

Синтаксис

let (tx, rx) = sync_channel(bound);

Пример

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

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

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

1 2 3

Пример

Давайте рассмотрим пример с несколькими потоками, где SyncSender блокирует отправку при заполнении буфера:

use std::sync::mpsc::sync_channel; use std::thread; fn main() { let (tx, rx) = sync_channel(1); let handle = thread::spawn(move || { for i in 1..=5 { tx.send(i).unwrap(); println!("sent: {}", i); } }); thread::sleep(std::time::Duration::from_millis(100)); for _ in 1..=5 { let val = rx.recv().unwrap(); println!("received: {}", val); } handle.join().unwrap(); }

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

sent: 1 received: 1 sent: 2 received: 2 sent: 3 received: 3 sent: 4 received: 4 sent: 5 received: 5

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

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