#lock-free #ring-buffer #non-blocking #io #multi-producer

bondi

单生产者、多消费者无锁环形缓冲区(实验性)

3 个版本

0.1.2 2021年1月11日
0.1.1 2021年1月9日
0.1.0 2021年1月9日

866并发 中排名

每月 23 次下载

MIT 许可证

13KB
252

Bondi - 无锁单生产者多生产者环形缓冲区

Bondi 是创建一个无锁、有界、单生产者、多消费者数据结构的又一次尝试。

注意:这是一个实验性项目。请期待可能出现的问题和变化。

使用方法

    // initialize a writer and two readers
    // send 100 `Message`s, and receive them from different threads
    struct Message(usize)

    fn main() {
        let bondi = Bondi::new(100);
        let writer = bondi.get_tx().unwrap();
        let reader = bondi.get_rx().unwrap();
        let reader2 = bondi.get_rx().unwrap();

        std::thread::spawn(move || {
            for i in 0..100 {
                writer.write(Message(i));
            }
        });

        std::thread::spawn(move || {
            let _ = reader.read();
        });

        std::thread::spawn(move || {
            let _ = reader2.read();
        }).join().unwrap();
    }

灵感来源

Disruptor

Bus

Turbine

依赖项

~0.4–1MB
~21K SLoC