spsc-buffer 0.1.1

Single-producer single-consumer lock-free buffer
Documentation
#[macro_use]
extern crate criterion;
extern crate spsc_buffer;

use criterion::Criterion;

use std::io::{Read, Write};
use std::thread;

fn criterion_benchmark(c: &mut Criterion) {
    const BUFSIZE: usize = 1000;

    c.bench_function("write 1000 bytes", |b| {
        b.iter(|| {
            let (mut producer, mut consumer) = spsc_buffer::spsc_buffer(100);

            let handle = thread::spawn(move || {
                let buf = [1u8; BUFSIZE];

                let mut written = 0;
                while written < BUFSIZE {
                    written += producer.write(&buf[written..]).expect("failed to write");
                }
            });

            let mut buf = [0u8; BUFSIZE];

            let mut written = 0;
            while written < BUFSIZE {
                written += consumer.read(&mut buf[written..]).expect("failed to read");
            }

            handle.join().expect("could not join thread");

            assert_eq!(&buf[..], &[1u8; BUFSIZE][..]);
        })
    });
}

criterion_group!(
    name = benches;
    config = criterion::Criterion::default().sample_size(5);
    targets = criterion_benchmark
);
criterion_main!(benches);