1- #define atomic_compare_exchange_weak (a , b , c ) 0
2- #define atomic_compare_exchange_weak_explicit (a , b , c , d , e ) 0
3- #define atomic_load (a ) 0
4- #define atomic_load_explicit (a , b )
5- #define atomic_store (a , b ) 0
6- #define atomic_store_explicit (a , b , c ) 0
71#define ATOMIC_VAR_INIT (value ) (value)
82#define atomic_is_lock_free (obj ) __c11_atomic_is_lock_free(sizeof(*(obj)))
9- typedef _Atomic (int ) atomic_int ;
3+ typedef _Atomic (int ) atomic_int ;
4+
5+ #define __ATOMIC_RELAXED 0
6+ #define __ATOMIC_CONSUME 1
7+ #define __ATOMIC_ACQUIRE 2
8+ #define __ATOMIC_RELEASE 3
9+ #define __ATOMIC_ACQ_REL 4
10+ #define __ATOMIC_SEQ_CST 5
11+
12+ typedef enum memory_order {
13+ memory_order_relaxed = __ATOMIC_RELAXED ,
14+ memory_order_consume = __ATOMIC_CONSUME ,
15+ memory_order_acquire = __ATOMIC_ACQUIRE ,
16+ memory_order_release = __ATOMIC_RELEASE ,
17+ memory_order_acq_rel = __ATOMIC_ACQ_REL ,
18+ memory_order_seq_cst = __ATOMIC_SEQ_CST
19+ } memory_order ;
20+
21+ void atomic_thread_fence (memory_order );
22+ void atomic_signal_fence (memory_order );
23+
24+ #define atomic_thread_fence (order ) __c11_atomic_thread_fence(order)
25+ #define atomic_signal_fence (order ) __c11_atomic_signal_fence(order)
26+
27+ #define atomic_store (object , desired ) __c11_atomic_store(object, desired, __ATOMIC_SEQ_CST)
28+ #define atomic_store_explicit __c11_atomic_store
29+
30+ #define atomic_load (object ) __c11_atomic_load(object, __ATOMIC_SEQ_CST)
31+ #define atomic_load_explicit __c11_atomic_load
32+
33+ #define atomic_exchange (object , desired ) __c11_atomic_exchange(object, desired, __ATOMIC_SEQ_CST)
34+ #define atomic_exchange_explicit __c11_atomic_exchange
35+
36+ #define atomic_compare_exchange_strong (object , expected , desired ) __c11_atomic_compare_exchange_strong(object, expected, desired, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
37+ #define atomic_compare_exchange_strong_explicit __c11_atomic_compare_exchange_strong
38+
39+ #define atomic_compare_exchange_weak (object , expected , desired ) __c11_atomic_compare_exchange_weak(object, expected, desired, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
40+ #define atomic_compare_exchange_weak_explicit __c11_atomic_compare_exchange_weak
41+
42+ #define atomic_fetch_add (object , operand ) __c11_atomic_fetch_add(object, operand, __ATOMIC_SEQ_CST)
43+ #define atomic_fetch_add_explicit __c11_atomic_fetch_add
44+
45+ #define atomic_fetch_sub (object , operand ) __c11_atomic_fetch_sub(object, operand, __ATOMIC_SEQ_CST)
46+ #define atomic_fetch_sub_explicit __c11_atomic_fetch_sub
47+
48+ #define atomic_fetch_or (object , operand ) __c11_atomic_fetch_or(object, operand, __ATOMIC_SEQ_CST)
49+ #define atomic_fetch_or_explicit __c11_atomic_fetch_or
50+
51+ #define atomic_fetch_xor (object , operand ) __c11_atomic_fetch_xor(object, operand, __ATOMIC_SEQ_CST)
52+ #define atomic_fetch_xor_explicit __c11_atomic_fetch_xor
53+
54+ #define atomic_fetch_and (object , operand ) __c11_atomic_fetch_and(object, operand, __ATOMIC_SEQ_CST)
55+ #define atomic_fetch_and_explicit __c11_atomic_fetch_and
56+
57+ typedef struct atomic_flag { _Atomic (_Bool ) _Value ; } atomic_flag ;
58+
59+ _Bool atomic_flag_test_and_set (volatile atomic_flag * );
60+ _Bool atomic_flag_test_and_set_explicit (volatile atomic_flag * , memory_order );
61+
62+ void atomic_flag_clear (volatile atomic_flag * );
63+ void atomic_flag_clear_explicit (volatile atomic_flag * , memory_order );
64+
65+ #define atomic_flag_test_and_set (object ) __c11_atomic_exchange(&(object)->_Value, 1, __ATOMIC_SEQ_CST)
66+ #define atomic_flag_test_and_set_explicit (object , order ) __c11_atomic_exchange(&(object)->_Value, 1, order)
67+
68+ #define atomic_flag_clear (object ) __c11_atomic_store(&(object)->_Value, 0, __ATOMIC_SEQ_CST)
69+ #define atomic_flag_clear_explicit (object , order ) __c11_atomic_store(&(object)->_Value, 0, order)
0 commit comments