A wait-free single-producer single-consumer ring buffer for Rust.
- Crate: https://crates.io/crates/rtrb
- Documentation: https://docs.rs/rtrb
Add this to your Cargo.toml
:
[dependencies]
rtrb = "0.1"
Running the tests:
cargo test
Testing the benchmarks (without actually benchmarking):
cargo test --benches
Running the benchmarks (using the criterion crate;
results will be available in target/criterion/report/index.html
):
cargo bench
Creating the HTML docs (which will be available in target/doc/rtrb/index.html
):
cargo doc
This crate's minimum supported rustc
version (MSRV) is 1.36.0
.
The MSRV is not expected to be updated frequently, but if it is,
there will be (at least) a minor version bump.
The initial code has been ripped off of crossbeam-rs/crossbeam#338, with permission of the PR author @stjepang.
It has been isolated from the rest of crossbeam
with git-filter-repo:
git-filter-repo --subdirectory-filter crossbeam-queue --path src/spsc.rs --path tests/spsc.rs --refs refs/heads/spsc
If you don't like this crate, no problem, there are several alternatives for you to choose from. There are many varieties of ring buffers available, here we limit the selection to wait-free SPSC implementations:
- shmem-ipc (see
shmem_ipc::sharedring
andshmem_ipc::ringbuf
modules) - heapless (for embedded systems, see
heapless::spsc
) - jack (FFI bindings for JACK, see
jack::Ringbuffer
) - npnc (see
npnc::bounded::spsc
module) - ringbuf
- spsc-bounded-queue
There are also implementations in other languages:
- boost::lockfree::spsc_queue (C++)
- JACK ring buffer (C)
- PortAudio ring buffer (C)
- readerwriterqueue (C++)
- SPSCQueue (C++)
If you know more alternatives for this list, please open an issue.
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.