Expand description
A single-producer single-consumer (SPSC) lock-free ring buffer.
This crate provides an efficient, lock-free ring buffer for communicating between a single producer thread and a single consumer thread. It uses atomic operations to ensure memory safety without heavy locks.
The buffer size must be a power of two.
§Static Initialization
This crate is designed to be friendly to no_std environments and can be statically
initialized.
use loopq::Buffer;
static BUFFER: Buffer<1024> = Buffer::new();
fn main() {
let mut producer = BUFFER.producer();
let mut consumer = BUFFER.consumer();
let mut w = producer.writable_bytes();
w[0] = 123;
w.commit(1);
let r = consumer.readable_bytes();
assert_eq!(r[0], 123);
r.consume(1);
}§Examples
use loopq::Buffer;
let buffer = Buffer::<1024>::new();
let mut producer = buffer.producer();
let mut consumer = buffer.consumer();
let mut w = producer.writable_bytes();
w[0] = 42;
w.commit(1);
let r = consumer.readable_bytes();
assert_eq!(r[0], 42);Structs§
- Buffer
- A lock-free ring buffer.
- Consumer
- A handle for reading from the buffer.
- Producer
- A handle for writing to the buffer.
- Readable
Bytes - A guard granting access to a contiguous slice of readable bytes.
- Writable
Bytes - A guard granting access to a contiguous slice of writable memory.