yring 0.2.1

Bounded SPSC ring with ypipe-style batched flush/prefetch
Documentation
use std::thread;

fn main() {
    let (mut producer, mut consumer) = yring::spsc::<u64>(1024);

    let n = 1_000_000;

    let sender = thread::spawn(move || {
        let mut batch = 0u64;
        for i in 0..n {
            while producer.push(i).is_err() {
                producer.flush();
                thread::yield_now();
            }
            batch += 1;
            if batch == 64 {
                producer.flush();
                batch = 0;
            }
        }
        producer.flush();
    });

    let mut received = 0u64;
    while received < n {
        if consumer.prefetch() > 0 {
            while let Some(v) = consumer.pop() {
                assert_eq!(v, received);
                received += 1;
            }
        } else {
            thread::yield_now();
        }
    }

    sender.join().unwrap();
    println!("transferred {n} items correctly");
}