conqueue

Crates.ioconqueue
lib.rsconqueue
version0.4.0
sourcesrc
created_at2019-07-30 23:51:01.589305
updated_at2021-01-24 20:33:32.307907
descriptionYet another multi-producer, single-consumer queue (MPSC)
homepagehttps://github.com/longshorej/conqueue
repositoryhttps://github.com/longshorej/conqueue
max_upload_size
id153102
size16,742
(longshorej-tools)

documentation

README

Conqueue

Crates.io Crates.io

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:

[dependencies]
conqueue = "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 (tx1, mut rx) = conqueue::Queue::unbounded();
let tx2 = tx1.clone();

tx1.push(1);
tx2.push(2);

while let Some(value) = rx.pop() {
  println!("popped: {}", value);
}

Release Notes

0.4.0 - 2021-01-24

  • Fix a major issue with Sync, Send trait bounds for QueueSender, 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:

cargo test

To run a benchmark for the queue, execute the following:

cargo test --release -- --ignored --nocapture

To release the create, perform the following:

  1. Edit Cargo.toml, bumping the version as appropriate.
  2. Edit README.md, adding an entry to the Release Notes, and updating the TOML snippet's version.
  3. Commit these changes and push them to master.
  4. 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.

Commit count: 22

cargo fmt