通道可用于将数据从一个线程发送到另一线程。下面是一个简单的生产者-消费者系统的示例,其中主线程产生值0、1,...,9,而生成的线程将其打印出来:
use std::thread; use std::sync::mpsc::channel; fn main() { // 创建一个具有发送端(tx)和接收端(rx)的通道。 let (tx, rx) = channel(); // 生成一个新线程,并将接收端移到该线程中。 let join_handle = thread::spawn(move || { // 继续循环接收,直到丢弃TX! while let Ok(n) = rx.recv() { // 注意:`recv()`总是阻塞 println!("Received {}", n); } }); // 注意:在这里使用`rx`会产生编译错误,因为 // 移动到生成的线程中。 //将一些值发送到生成的线程。`unwrap()`仅在 // 接收端在可以缓冲之前被丢弃。 for i in 0..10 { tx.send(i).unwrap(); // 注意:`send()`永远不会阻塞 } // 删除`tx`,以便`rx.recv()`返回`Err(_)`。 drop(tx); // 等待生成的线程完成。 join_handle.join().unwrap(); }