document some enumerated types
[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         /** @brief The memory orders specified by the C11/C++11 memory models */
13         typedef enum memory_order {
14                 memory_order_relaxed,
15                 memory_order_consume,
16                 memory_order_acquire,
17                 memory_order_release,
18                 memory_order_acq_rel,
19                 memory_order_seq_cst
20         } memory_order;
21
22         typedef struct atomic_object {
23                 int value;
24         } atomic_int;
25
26         void atomic_store_explicit(struct atomic_object *obj, int value, memory_order order);
27 #define atomic_store(A, B) atomic_store_explicit((A), (B), memory_order_seq_cst)
28
29         int atomic_load_explicit(struct atomic_object *obj, memory_order order);
30 #define atomic_load(A) atomic_load_explicit((A), memory_order_seq_cst)
31
32         void atomic_init(struct atomic_object *obj, int value);
33
34 #ifdef __cplusplus
35 }
36 #endif
37
38 #endif /* __LIBATOMIC_H__ */