当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。