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

atomic-queue

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

7 releases (3 stable)

2.1.0 Jan 17, 2024
2.0.0 Dec 7, 2023
1.0.1 Sep 22, 2022
1.0.0-alpha.4 May 3, 2022
0.1.0 Jul 9, 2021

#756 in Audio

Download history 25/week @ 2024-01-14 3/week @ 2024-02-11 31/week @ 2024-02-18 27/week @ 2024-02-25 14/week @ 2024-03-03 23/week @ 2024-03-10 19/week @ 2024-03-17 18/week @ 2024-03-24 38/week @ 2024-03-31 11/week @ 2024-04-07 13/week @ 2024-04-14 19/week @ 2024-04-21

81 downloads per month
Used in 2 crates

MIT license

205KB
327 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