]>
git.proxmox.com Git - rustc.git/blob - vendor/crossbeam-utils/benches/atomic_cell.rs
5 use std
::sync
::Barrier
;
7 use crossbeam_utils
::atomic
::AtomicCell
;
8 use crossbeam_utils
::thread
;
11 fn load_u8(b
: &mut test
::Bencher
) {
12 let a
= AtomicCell
::new(0u8);
14 b
.iter(|| sum
+= a
.load());
19 fn store_u8(b
: &mut test
::Bencher
) {
20 let a
= AtomicCell
::new(0u8);
21 b
.iter(|| a
.store(1));
25 fn fetch_add_u8(b
: &mut test
::Bencher
) {
26 let a
= AtomicCell
::new(0u8);
27 b
.iter(|| a
.fetch_add(1));
31 fn compare_exchange_u8(b
: &mut test
::Bencher
) {
32 let a
= AtomicCell
::new(0u8);
35 let _
= a
.compare_exchange(i
, i
.wrapping_add(1));
36 i
= i
.wrapping_add(1);
41 fn concurrent_load_u8(b
: &mut test
::Bencher
) {
42 const THREADS
: usize = 2;
43 const STEPS
: usize = 1_000_000;
45 let start
= Barrier
::new(THREADS
+ 1);
46 let end
= Barrier
::new(THREADS
+ 1);
47 let exit
= AtomicCell
::new(false);
49 let a
= AtomicCell
::new(0u8);
51 thread
::scope(|scope
| {
53 scope
.spawn(|_
| loop {
85 fn load_usize(b
: &mut test
::Bencher
) {
86 let a
= AtomicCell
::new(0usize
);
88 b
.iter(|| sum
+= a
.load());
93 fn store_usize(b
: &mut test
::Bencher
) {
94 let a
= AtomicCell
::new(0usize
);
95 b
.iter(|| a
.store(1));
99 fn fetch_add_usize(b
: &mut test
::Bencher
) {
100 let a
= AtomicCell
::new(0usize
);
101 b
.iter(|| a
.fetch_add(1));
105 fn compare_exchange_usize(b
: &mut test
::Bencher
) {
106 let a
= AtomicCell
::new(0usize
);
109 let _
= a
.compare_exchange(i
, i
.wrapping_add(1));
110 i
= i
.wrapping_add(1);
115 fn concurrent_load_usize(b
: &mut test
::Bencher
) {
116 const THREADS
: usize = 2;
117 const STEPS
: usize = 1_000_000;
119 let start
= Barrier
::new(THREADS
+ 1);
120 let end
= Barrier
::new(THREADS
+ 1);
121 let exit
= AtomicCell
::new(false);
123 let a
= AtomicCell
::new(0usize
);
125 thread
::scope(|scope
| {
126 for _
in 0..THREADS
{
127 scope
.spawn(|_
| loop {
134 test
::black_box(sum
);