]>
git.proxmox.com Git - rustc.git/blob - vendor/crossbeam-utils-0.7.2/benches/atomic_cell.rs
3 extern crate crossbeam_utils
;
6 use std
::sync
::Barrier
;
8 use crossbeam_utils
::atomic
::AtomicCell
;
9 use crossbeam_utils
::thread
;
12 fn load_u8(b
: &mut test
::Bencher
) {
13 let a
= AtomicCell
::new(0u8);
15 b
.iter(|| sum
+= a
.load());
20 fn store_u8(b
: &mut test
::Bencher
) {
21 let a
= AtomicCell
::new(0u8);
22 b
.iter(|| a
.store(1));
26 fn fetch_add_u8(b
: &mut test
::Bencher
) {
27 let a
= AtomicCell
::new(0u8);
28 b
.iter(|| a
.fetch_add(1));
32 fn compare_and_swap_u8(b
: &mut test
::Bencher
) {
33 let a
= AtomicCell
::new(0u8);
36 a
.compare_and_swap(i
, i
.wrapping_add(1));
37 i
= i
.wrapping_add(1);
42 fn concurrent_load_u8(b
: &mut test
::Bencher
) {
43 const THREADS
: usize = 2;
44 const STEPS
: usize = 1_000_000;
46 let start
= Barrier
::new(THREADS
+ 1);
47 let end
= Barrier
::new(THREADS
+ 1);
48 let exit
= AtomicCell
::new(false);
50 let a
= AtomicCell
::new(0u8);
52 thread
::scope(|scope
| {
54 scope
.spawn(|_
| loop {
86 fn load_usize(b
: &mut test
::Bencher
) {
87 let a
= AtomicCell
::new(0usize
);
89 b
.iter(|| sum
+= a
.load());
94 fn store_usize(b
: &mut test
::Bencher
) {
95 let a
= AtomicCell
::new(0usize
);
96 b
.iter(|| a
.store(1));
100 fn fetch_add_usize(b
: &mut test
::Bencher
) {
101 let a
= AtomicCell
::new(0usize
);
102 b
.iter(|| a
.fetch_add(1));
106 fn compare_and_swap_usize(b
: &mut test
::Bencher
) {
107 let a
= AtomicCell
::new(0usize
);
110 a
.compare_and_swap(i
, i
.wrapping_add(1));
111 i
= i
.wrapping_add(1);
116 fn concurrent_load_usize(b
: &mut test
::Bencher
) {
117 const THREADS
: usize = 2;
118 const STEPS
: usize = 1_000_000;
120 let start
= Barrier
::new(THREADS
+ 1);
121 let end
= Barrier
::new(THREADS
+ 1);
122 let exit
= AtomicCell
::new(false);
124 let a
= AtomicCell
::new(0usize
);
126 thread
::scope(|scope
| {
127 for _
in 0..THREADS
{
128 scope
.spawn(|_
| loop {
135 test
::black_box(sum
);