blob: 4b3e720af9c6585f150a83480302947083c096dd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#ifndef KIT_ATOMIC_H
#define KIT_ATOMIC_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#ifndef _MSC_VER
# include <stdatomic.h>
# define KIT_ATOMIC(type_) _Atomic type_
#else
enum {
memory_order_relaxed,
memory_order_consume,
memory_order_acquire,
memory_order_release,
memory_order_acq_rel,
memory_order_seq_cst
};
# ifdef _WIN64
# define KIT_ATOMIC_VAR int64_t
# else
# define KIT_ATOMIC_VAR int32_t
# endif
# define KIT_ATOMIC(type_) volatile KIT_ATOMIC_VAR
void kit_atomic_store_explicit(volatile KIT_ATOMIC_VAR *var,
KIT_ATOMIC_VAR value,
int memory_order);
KIT_ATOMIC_VAR kit_atomic_load_explicit(volatile KIT_ATOMIC_VAR *var,
int memory_order);
KIT_ATOMIC_VAR kit_atomic_fetch_add_explicit(
volatile KIT_ATOMIC_VAR *var, KIT_ATOMIC_VAR value,
int memory_order);
KIT_ATOMIC_VAR kit_atomic_exchange_explicit(
volatile KIT_ATOMIC_VAR *var, KIT_ATOMIC_VAR value,
int memory_order);
# define atomic_store_explicit kit_atomic_store_explicit
# define atomic_load_explicit kit_atomic_load_explicit
# define atomic_fetch_add_explicit kit_atomic_fetch_add_explicit
# define atomic_exchange_explicit kit_atomic_exchange_explicit
#endif
#ifndef KIT_DISABLE_SHORT_NAMES
# define ATOMIC KIT_ATOMIC
#endif
#ifdef __cplusplus
}
#endif
#endif
|