#lock-free #wait-free #spsc #queue

rtrb

A realtime-safe single-producer single-consumer ring buffer

1 unstable release

new 0.1.1 Nov 20, 2020
0.1.0 Nov 18, 2020

#130 in Concurrency

25 downloads per month

MIT/Apache

54KB
559 lines

Real-Time Ring Buffer

A wait-free single-producer single-consumer ring buffer for Rust.

Usage

Add this to your Cargo.toml:

[dependencies]
rtrb = "0.1"

Development

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 (using nightly Rust to enable intra-doc links; docs will be available in target/doc/rtrb/index.html):

cargo +nightly doc

Minimum Supported rustc Version

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.

Origin Story

The initial code has been ripped off of https://github.com/crossbeam-rs/crossbeam/pull/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

Alternatives

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:

There are also implementations in other languages:

If you know more alternatives for this list, please open an issue.

License

Licensed under either of

at your option.

Contribution

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.

Dependencies