C · 712 bytes Raw Blame History
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 }