| 1 | #include <stdatomic.h> |
| 2 | |
| 3 | _Atomic int gi; |
| 4 | _Atomic long gl; |
| 5 | |
| 6 | int swap_acqrel(int x) { |
| 7 | return atomic_exchange_explicit(&gi, x, memory_order_acq_rel); |
| 8 | } |
| 9 | |
| 10 | long swap64_acqrel(long x) { |
| 11 | return atomic_exchange_explicit(&gl, x, memory_order_acq_rel); |
| 12 | } |
| 13 | |
| 14 | int cas_acqrel(int expected, int desired) { |
| 15 | atomic_compare_exchange_strong_explicit( |
| 16 | &gi, |
| 17 | &expected, |
| 18 | desired, |
| 19 | memory_order_acq_rel, |
| 20 | memory_order_acquire |
| 21 | ); |
| 22 | return expected; |
| 23 | } |
| 24 | |
| 25 | long cas64_acqrel(long expected, long desired) { |
| 26 | atomic_compare_exchange_strong_explicit( |
| 27 | &gl, |
| 28 | &expected, |
| 29 | desired, |
| 30 | memory_order_acq_rel, |
| 31 | memory_order_acquire |
| 32 | ); |
| 33 | return expected; |
| 34 | } |