Merge branch 'master' of ssh://demsky.eecs.uci.edu/home/git/model-checker
[c11tester.git] / libatomic.h
1 /** @file libatomic.h
2  *  @brief Basic atomic operations to be exposed to user program.
3  */
4
5 #ifndef __LIBATOMIC_H__
6 #define __LIBATOMIC_H__
7
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11
12         typedef enum memory_order {
13                 memory_order_relaxed,
14                 memory_order_consume,
15                 memory_order_acquire,
16                 memory_order_release,
17                 memory_order_acq_rel,
18                 memory_order_seq_cst
19         } memory_order;
20
21         typedef struct atomic_object {
22                 int value;
23         } atomic_int;
24
25         void atomic_store_explicit(struct atomic_object *obj, int value, memory_order order);
26 #define atomic_store(A, B) atomic_store_explicit((A), (B), memory_order_seq_cst)
27
28         int atomic_load_explicit(struct atomic_object *obj, memory_order order);
29 #define atomic_load(A) atomic_load_explicit((A), memory_order_seq_cst)
30
31         void atomic_init(struct atomic_object *obj, int value);
32
33 #ifdef __cplusplus
34 }
35 #endif
36
37 #endif /* __LIBATOMIC_H__ */