當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust sync_channel用法及代碼示例


本文簡要介紹rust語言中 Function std::sync::mpsc::sync_channel 的用法。

用法

pub fn sync_channel<T>(bound: usize) -> (SyncSender<T>, Receiver<T>)

創建一個新的同步有界通道。在 SyncSender 上發送的所有數據將在 Receiver 上可用,其順序與發送時相同。與異步 channel 一樣, Receiver 將阻塞,直到有消息可用。但是,sync_channel 在發送者的語義上有很大的不同。

該通道有一個內部緩衝區,消息將在其中排隊。bound指定緩衝區大小。當內部緩衝區已滿時,未來的發送將堵塞等待緩衝區打開。請注意,緩衝區大小為 0 是有效的,在這種情況下,這將變為 “rendezvous channel”,其中每個std::sync::mpsc::SyncSender.send不會返回,直到std::sync::mpsc::Receiver.recv與之配對。

SyncSender 可以多次克隆到同一頻道的 send ,但隻支持一個 Receiver

與異步通道一樣,如果在嘗試使用 SyncSender 連接 send Receiver 斷開連接,則 send 方法將返回 SendError 。同樣,如果在嘗試 recv SyncSender 斷開連接,則 recv 方法將返回 RecvError

例子

use std::sync::mpsc::sync_channel;
use std::thread;

let (sender, receiver) = sync_channel(1);

// this returns immediately
sender.send(1).unwrap();

thread::spawn(move|| {
    // this will block until the previous message has been received
    sender.send(2).unwrap();
});

assert_eq!(receiver.recv().unwrap(), 1);
assert_eq!(receiver.recv().unwrap(), 2);

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Function std::sync::mpsc::sync_channel。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。