如何在 Rust 中实现单生产者、多消费者(SPMC)通道?

Gre*_*reg 6 rust

标准库只有多个生产者单消费者 (MPSC) 通道。

也就是说,如果有 10 个消费者,那么每个消费者如何接收单个生产者发送的消息?

小智 10

查看@CodesInChaos 提到的总线板条箱。一个工作示例:

extern crate bus;

use std::thread;

fn main() {
    let mut bus = bus::Bus::new(10);
    let mut receiver1 = bus.add_rx();
    let mut receiver2 = bus.add_rx();
    let mut receiver3 = bus.add_rx();

    let a = thread::spawn(move || {
        println!("receiver1 - {}", receiver1.recv().expect("1"));
    });
    let b = thread::spawn(move || {
        println!("receiver2 - {}", receiver2.recv().expect("2"));
    });
    let c = thread::spawn(move || {
        println!("receiver3 - {}", receiver3.recv().expect("3"));
    });

    bus.broadcast(42);
    a.join().expect("a");
    b.join().expect("b");
    c.join().expect("c");
}
Run Code Online (Sandbox Code Playgroud)

  • 不,不是机器人,我只是喜欢策划 [tag:rust] 问题,以便学习知识并使问答对最大数量的用户有用。 (3认同)