Crate llq[−][src]
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 Node
s 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 |
Node | An individual node which may be pushed onto and popped from a |
Producer | The producer half of a |
Queue | A wait-free SPSC linked-list queue. |