本文簡要介紹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 symlink用法及代碼示例
- Rust symlink_dir用法及代碼示例
- Rust symlink_metadata用法及代碼示例
- Rust symlink_file用法及代碼示例
- Rust str.make_ascii_uppercase用法及代碼示例
- Rust slice.sort_unstable_by_key用法及代碼示例
- Rust slice.iter_mut用法及代碼示例
- Rust slice.windows用法及代碼示例
- Rust slice.repeat用法及代碼示例
- Rust slice.group_by_mut用法及代碼示例
- Rust slice.align_to_mut用法及代碼示例
- Rust size_of用法及代碼示例
- Rust slice.as_chunks_unchecked用法及代碼示例
- Rust str.strip_suffix用法及代碼示例
- Rust str.trim_left用法及代碼示例
- Rust slice.fill用法及代碼示例
- Rust slice.array_windows用法及代碼示例
- Rust slice.sort_unstable_by用法及代碼示例
- Rust slice.sort用法及代碼示例
- Rust str.char_indices用法及代碼示例
- Rust str.to_ascii_lowercase用法及代碼示例
- Rust str用法及代碼示例
- Rust slice.rotate_left用法及代碼示例
- Rust slice.as_mut_ptr用法及代碼示例
- Rust str.trim用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Function std::sync::mpsc::sync_channel。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。