Crate llq

Crate llq 

Source
Expand description

A wait-free single-producer single-consumer linked-list queue with individually reusable nodes.

Queue operations (Producer::push() and Consumer::pop()) do not block or allocate memory. Individual Nodes are allocated and managed separately, and can be reused on multiple queues.

§Examples

Using a queue to send values between threads:

use llq::{Node, Queue};

let (mut producer, mut consumer) = Queue::<usize>::new().split();

producer.push(Node::new(0));
producer.push(Node::new(1));
producer.push(Node::new(2));

std::thread::spawn(move || {
    assert_eq!(*consumer.pop().unwrap(), 0);
    assert_eq!(*consumer.pop().unwrap(), 1);
    assert_eq!(*consumer.pop().unwrap(), 2);
    assert!(consumer.pop().is_none());
}).join().unwrap();

Reusing a node between multiple queues:

use llq::{Node, Queue};

let (mut producer1, mut consumer1) = Queue::<usize>::new().split();
let (mut producer2, mut consumer2) = Queue::<usize>::new().split();

let node = Node::new(3);
producer1.push(node);
let node = consumer1.pop().unwrap();
producer2.push(node);
let node = consumer2.pop().unwrap();

assert_eq!(*node, 3);

Structs§

Consumer
The consumer half of a Queue.
Node
An individual node which may be pushed onto and popped from a Queue.
Producer
The producer half of a Queue.
Queue
A wait-free SPSC linked-list queue.