Conqueue
Conqueue is yet another multi-producer, single-consumer queue (MPSC) for the Rust programming language.
Getting Started
To get started, add the following to your Cargo.toml file:
[]
= "0.4.0"
Then, at the root of your crate:
extern crate conqueue
Finally, create a sender/receiver pair. The sender may be cloned to
allow concurrent producers, and it is both Send and Sync. The
receiver is Send so it may be moved to other threads.
let = unbounded;
let tx2 = tx1.clone;
tx1.push;
tx2.push;
while let Some = rx.pop
Release Notes
0.4.0 - 2021-01-24
- Fix a major issue with
Sync,Sendtrait bounds forQueueSender,QueueReceiver, thanks to @JOE1994
0.3.0 - 2019-09-03
- Use compare_exchange, allowing push with a single atomic instruction in certain circumstances
- Fix a small memory leak when all related senders/receivers are dropped
0.2.1 - 2019-08-29
- Republish to fix README.md on Crates.io
0.2.0 - 2019-08-29
- Items that are pushed into a queue are now dropped if there is no receiver
0.1.1 - 2019-07-30
- Senders should be
Send
0.1.0 - 2019-07-30
- Initial release. Likely not production ready.
Developer Notes
To run the tests, execute the following:
To run a benchmark for the queue, execute the following:
To release the create, perform the following:
- Edit
Cargo.toml, bumping the version as appropriate. - Edit
README.md, adding an entry to the Release Notes, and updating the TOML snippet's version. - Commit these changes and push them to
master. - Create and push a tag that starts with "v" -- e.g. "v0.2.0"
Inspiration
This code is largely based on majek's implementation of Michael-Scott queue. You can find the code here and a blog post here.
License
Conqueue is provided under the MIT license.