A wait-free single-producer single-consumer linked-list queue with individually reusable nodes.
llq
provides smart pointers analogous to Box
and Arc
which mark their contents for deferred collection on another thread rather than immediately freeing it, making them safe to drop on a real-time thread.
Using a queue to send values between threads:
```rust use llq::{Node, Queue};
let (mut producer, mut consumer) = Queue::
producer.push(Node::new(0)); producer.push(Node::new(1)); producer.push(Node::new(2));
std::thread::spawn(move || { asserteq!(*consumer.pop().unwrap(), 0); asserteq!(consumer.pop().unwrap(), 1); assert_eq!(consumer.pop().unwrap(), 2); assert!(consumer.pop().is_none()); }).join().unwrap();
```
Reusing a node between multiple queues:
```rust use llq::{Node, Queue};
let (mut producer1, mut consumer1) = Queue::
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); ```
llq
is distributed under the terms of both the MIT license and the Apache license, version 2.0. Contributions are accepted under the same terms.