use std::sync::{Arc, Mutex};
use std::thread;
use std::sync::mpsc::{channel, Sender, Receiver};
fn main() {
let (tx, rx): (Sender<i32>, Receiver<i32>) = channel();
let producer = thread::spawn(move || {
for i in 0..10 {
tx.send(i).unwrap();
thread::sleep(std::time::Duration::from_millis(100));
}
});
let consumer = thread::spawn(move || {
for num in rx {
println!("Received: {}", num);
}
});
producer.join().unwrap();
drop(tx);
consumer.join().unwrap();
}
- 通道创建:
- 使用
std::sync::mpsc::channel
创建一个通道,tx
是发送端,rx
是接收端。mpsc
代表多生产者单消费者。这里虽然只有一个生产者,但mpsc
通道很适合这种基本的生产者 - 消费者模型。
- 生产者线程:
thread::spawn
创建一个新线程,在这个线程中,通过tx.send(i)
将数字i
发送到通道中。每发送一个数字后,线程睡眠100毫秒,模拟一些生产工作。
- 消费者线程:
- 同样使用
thread::spawn
创建一个新线程,在这个线程中,通过for num in rx
循环从通道中接收数字并打印。这里rx
实现了Iterator
trait,当通道关闭(发送端tx
被丢弃)时,循环会结束。
- 线程等待:
- 使用
producer.join().unwrap()
和consumer.join().unwrap()
等待两个线程完成。在等待生产者线程完成后,显式地丢弃发送端tx
,这样消费者线程的接收循环会终止。