#![feature(test)] extern crate test; use std::sync::Barrier; use crossbeam_epoch as epoch; use crossbeam_utils::thread::scope; use test::Bencher; #[bench] fn single_flush(b: &mut Bencher) { const THREADS: usize = 16; let start = Barrier::new(THREADS + 1); let end = Barrier::new(THREADS + 1); scope(|s| { for _ in 0..THREADS { s.spawn(|_| { epoch::pin(); start.wait(); end.wait(); }); } start.wait(); b.iter(|| epoch::pin().flush()); end.wait(); }) .unwrap(); } #[bench] fn multi_flush(b: &mut Bencher) { const THREADS: usize = 16; const STEPS: usize = 10_000; b.iter(|| { scope(|s| { for _ in 0..THREADS { s.spawn(|_| { for _ in 0..STEPS { let guard = &epoch::pin(); guard.flush(); } }); } }) .unwrap(); }); }