33#if defined(__cplusplus) && __cplusplus > 201100
38typedef void *dt_atomic_ptr;
43 __atomic_store_n(var,
value, __ATOMIC_SEQ_CST);
47 return __atomic_load_n(var, __ATOMIC_SEQ_CST);
50static inline void *
dt_atomic_get_ptr(
const dt_atomic_ptr *var) {
return __atomic_load_n(var, __ATOMIC_SEQ_CST); }
56 return __atomic_compare_exchange_n(var, expected,
value, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
62#elif !defined(__STDC_NO_ATOMICS__)
79{
return atomic_compare_exchange_strong(var,expected,
value); }
84#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNU_MINOR__ >= 8))
89typedef volatile uint64_t dt_atomic_uint64;
90typedef void *
volatile dt_atomic_ptr;
93{
int value ; __atomic_load(var,&
value,__ATOMIC_SEQ_CST);
return value; }
99{
void *
value; __atomic_load(var,&
value,__ATOMIC_SEQ_CST);
return value; }
104{
int orig; __atomic_exchange(var,&
value,&orig,__ATOMIC_SEQ_CST);
return orig; }
106{
return __atomic_compare_exchange(var,expected,&
value,0,__ATOMIC_SEQ_CST,__ATOMIC_SEQ_CST); }
116extern pthread_mutex_t dt_atom_mutex;
120typedef void *dt_atomic_ptr;
123 pthread_mutex_lock(&dt_atom_mutex);
125 pthread_mutex_unlock(&dt_atom_mutex);
130 pthread_mutex_lock(&dt_atom_mutex);
132 pthread_mutex_unlock(&dt_atom_mutex);
137 pthread_mutex_lock(&dt_atom_mutex);
139 pthread_mutex_unlock(&dt_atom_mutex);
144 pthread_mutex_lock(&dt_atom_mutex);
146 pthread_mutex_unlock(&dt_atom_mutex);
152 pthread_mutex_lock(&dt_atom_mutex);
154 pthread_mutex_unlock(&dt_atom_mutex);
160 pthread_mutex_lock(&dt_atom_mutex);
162 pthread_mutex_unlock(&dt_atom_mutex);
168 pthread_mutex_lock(&dt_atom_mutex);
171 pthread_mutex_unlock(&dt_atom_mutex);
177 pthread_mutex_lock(&dt_atom_mutex);
180 pthread_mutex_unlock(&dt_atom_mutex);
186 pthread_mutex_lock(&dt_atom_mutex);
187 int origvalue = *var;
189 pthread_mutex_unlock(&dt_atom_mutex);
195 pthread_mutex_lock(&dt_atom_mutex);
196 int origvalue = *var;
198 if (origvalue == *expected)
203 *expected = origvalue;
204 pthread_mutex_unlock(&dt_atom_mutex);
210 pthread_mutex_lock(&dt_atom_mutex);
212 pthread_mutex_unlock(&dt_atom_mutex);
217 pthread_mutex_lock(&dt_atom_mutex);
219 pthread_mutex_unlock(&dt_atom_mutex);
#define TRUE
Definition ashift_lsd.c:162
#define FALSE
Definition ashift_lsd.c:158
static void dt_atomic_set_int(dt_atomic_int *var, int value)
Definition atomic.h:69
static void dt_atomic_set_uint64(dt_atomic_uint64 *var, uint64_t value)
Definition atomic.h:71
static int dt_atomic_add_int(dt_atomic_int *var, int incr)
Definition atomic.h:75
static void * dt_atomic_get_ptr(const dt_atomic_ptr *var)
Definition atomic.h:74
typedef _Atomic(uint64_t) dt_atomic_uint64
atomic_int dt_atomic_int
Definition atomic.h:66
static void dt_atomic_or_int(dt_atomic_int *var, int flags)
Definition atomic.h:81
static int dt_atomic_sub_int(dt_atomic_int *var, int decr)
Definition atomic.h:76
static uint64_t dt_atomic_get_uint64(const dt_atomic_uint64 *var)
Definition atomic.h:72
static int dt_atomic_exch_int(dt_atomic_int *var, int value)
Definition atomic.h:77
static void dt_atomic_set_ptr(dt_atomic_ptr *var, void *value)
Definition atomic.h:73
static int dt_atomic_CAS_int(dt_atomic_int *var, int *expected, int value)
Definition atomic.h:78
static void dt_atomic_and_int(dt_atomic_int *var, int flags)
Definition atomic.h:82
static int dt_atomic_get_int(dt_atomic_int *var)
Definition atomic.h:70
static const dt_aligned_pixel_simd_t value
Definition darktable.h:577
dt_mipmap_buffer_dsc_flags flags
Definition mipmap_cache.c:4
unsigned __int64 uint64_t
Definition strptime.c:75