subms-spsc-ring-buffer 0.5.0

submillisecond.com cookbook recipe - concurrency: subms-spsc-ring-buffer. Wait-free SPSC ring buffer with cache-line padded counters and opposite-index caching; sub-50ns enqueue/dequeue on sibling cores.
Documentation
use std::thread;
use subms_spsc_ring_buffer::SpscRingBuffer;

fn main() {
    let (mut tx, mut rx) = SpscRingBuffer::with_capacity::<u32>(16);

    let producer = thread::spawn(move || {
        for i in 0..10u32 {
            while tx.try_push(i).is_err() {}
        }
    });

    let consumer = thread::spawn(move || {
        let mut seen = Vec::new();
        while seen.len() < 10 {
            if let Some(v) = rx.try_pop() {
                seen.push(v);
            }
        }
        seen
    });

    producer.join().unwrap();
    let seen = consumer.join().unwrap();
    println!("consumed: {seen:?}");
}