Crate loopq

Crate loopq 

Source
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.
ReadableBytes
A guard granting access to a contiguous slice of readable bytes.
WritableBytes
A guard granting access to a contiguous slice of writable memory.