Function std::sync::mpsc::sync_channel
1.0.0 · source · pub fn sync_channel<T>(bound: usize) -> (SyncSender<T>, Receiver<T>)
Expand description
创建一个新的同步有界通道。
SyncSender
上发送的所有数据将以与发送相同的顺序在 Receiver
上可用。
像异步 channel
一样,Receiver
将阻塞直到消息可用为止。
然而,sync_channel
在发送者的语义上有很大不同。
该通道具有内部缓冲区,消息将在该缓冲区上排队。
bound
指定缓冲区大小。
当内部缓冲区已满时,future 将发送 block,等待缓冲区打开。
请注意,缓冲区大小为 0 是有效的,在这种情况下,它变为 “会合通道”,其中每个 send
在与 recv
配对之前不会返回。
SyncSender
可以多次克隆到 send
到同一通道,但是仅支持一个 Receiver
。
与异步通道一样,如果在尝试使用 SyncSender
进行 send
时断开 Receiver
,则 send
方法将返回 SendError
。
同样,如果在尝试 recv
时断开 SyncSender
的连接,则 recv
方法将返回 RecvError
。
Examples
use std::sync::mpsc::sync_channel;
use std::thread;
let (sender, receiver) = sync_channel(1);
// 这立即返回
sender.send(1).unwrap();
thread::spawn(move|| {
// 这将阻塞,直到收到上一条消息为止
sender.send(2).unwrap();
});
assert_eq!(receiver.recv().unwrap(), 1);
assert_eq!(receiver.recv().unwrap(), 2);
Run