rust - 如何在 Rust 中实现单一生产者、多个消费者 (SPMC) channel ?

标签 rust

<分区>

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

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

最佳答案

查看 bus装箱@CodesInChaos mentioned .一个工作示例:

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");
}

关于rust - 如何在 Rust 中实现单一生产者、多个消费者 (SPMC) channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50893327/

相关文章:

rust - vector 的借用引用的生命周期与其包含的借用指针之间有什么关系?

rust - 谁拥有堆中的 Box?

multithreading - 如何为 RustBox 实现 Sync?

rust - 实现用于复制的项目集合的最佳方法?

rust - 如何使用带条件的 if let 语句?

rust - 提款或存款后是否必须处理 `Imbalance` 类型?

rust - 获取当前线程 ID 和进程 ID 作为整数?

rust - 如何让函数返回具有相同项目类型的两个迭代器之一?

rust - 由于在 "thread '上出现了 'called ` main错误,导致无法创建通用JNIEnv结果:: unwrap()` on an ` Err`值

stack - 使用内联汇编更改堆栈指针时调用函数会崩溃