Rust 编程中的通道
rust programmingserver side programmingprogramming
通道是一种允许两个或多个线程之间进行通信的媒介。Rust 提供异步通道,可实现线程之间的通信。
Rust 中的通道允许两个端点之间进行单向通信。这两个端点是 Sender 和 Receiver。
示例
请考虑下面显示的示例 −
use std::sync::mpsc::{Sender, Receiver}; use std::sync::mpsc; use std::thread; static NTHREADS: i32 = 3; fn main() { let (tx, rx): (Sender, Receiver) = mpsc::channel(); let mut children = Vec::new(); for id in 0..NTHREADS { let thread_tx = tx.clone(); let child = thread::spawn(move || { thread_tx.send(id).unwrap(); println!("thread {} done", id); }); children.push(child); } let mut ids = Vec::with_capacity(NTHREADS as usize); for _ in 0..NTHREADS { ids.push(rx.recv()); } for child in children { child.join().expect("oops! the child thread ceases working"); } println!("{:?}", ids); }
在上面的代码中,我们尝试通过通道将线程的 id 传递给另一个线程。
输出
当我们运行上面的代码时,我们将看到以下输出:
thread 0 done thread 1 done thread 2 done [Ok(0), Ok(1), Ok(2)]
输出意味着所有线程都运行正常,并且通过通道在它们之间启用了通信。