#lock-free-queue #producer-consumer #multi-consumer #multi-producer #real-time #bounded

atomic-queue

Simple bounded lock-free queue for use in Audio applications, ported from https://github.com/max0x7ba/atomic_queue

8 releases (4 stable)

2.2.0 Aug 13, 2024
2.1.0 Jan 17, 2024
2.0.0 Dec 7, 2023
1.0.1 Sep 22, 2022
0.1.0 Jul 9, 2021

#723 in Audio

Download history 41/week @ 2024-08-31 11/week @ 2024-09-07 18/week @ 2024-09-14 35/week @ 2024-09-21 29/week @ 2024-09-28 2/week @ 2024-10-05 33/week @ 2024-10-12 6/week @ 2024-10-19 8/week @ 2024-10-26 24/week @ 2024-11-02 1/week @ 2024-11-09 13/week @ 2024-11-16 22/week @ 2024-11-23 17/week @ 2024-11-30 25/week @ 2024-12-07 16/week @ 2024-12-14

83 downloads per month
Used in 2 crates

MIT license

205KB
351 lines

atomic-queue

crates.io docs.rs


Multi-producer multi-consumer bounded lock-free queue for use in Audio applications, ported from https://github.com/max0x7ba/atomic_queue.

Quite a bit slower than ringbuf (~2x) on i7.

I'd think this is fine since this queue supporting multiple consumers and multiple producers while ringbuf is single producer single consumer.

30% faster on a M1 Pro Macbook.

License

MIT


lib.rs:

atomic_queue is a port of C++'s max0x7ba/atomic_queue implementation to rust.

This is part of augmented-audio.

It provides a bounded multi-producer, multi-consumer lock-free queue that is real-time safe.

Usage

let queue: atomic_queue::Queue<usize> = atomic_queue::bounded(10);

queue.push(10);
if let Some(v) = queue.pop() {
    assert_eq!(v, 10);
}

Safety

This queue implementation uses unsafe internally.

Performance

When benchmarked on a 2017 i7, this was a lot slower than ringbuf (~2x).

I'd think this is fine since this queue supporting multiple consumers and multiple producers while ringbuf is single producer single consumer.

Testing again on a M1 Pro, it is 30% faster.

No runtime deps