33#if defined(__cplusplus) && __cplusplus > 201100
42 __atomic_store_n(var,
value, __ATOMIC_SEQ_CST);
46 return __atomic_load_n(var, __ATOMIC_SEQ_CST);
53 return __atomic_compare_exchange_n(var, expected,
value, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
59#elif !defined(__STDC_NO_ATOMICS__)
73{
return atomic_compare_exchange_strong(var,expected,
value); }
78#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNU_MINOR__ >= 8))
83typedef volatile uint64_t dt_atomic_uint64;
86{
int value ; __atomic_load(var,&
value,__ATOMIC_SEQ_CST);
return value; }
94{
int orig; __atomic_exchange(var,&
value,&orig,__ATOMIC_SEQ_CST);
return orig; }
96{
return __atomic_compare_exchange(var,expected,&
value,0,__ATOMIC_SEQ_CST,__ATOMIC_SEQ_CST); }
106extern pthread_mutex_t dt_atom_mutex;
112 pthread_mutex_lock(&dt_atom_mutex);
114 pthread_mutex_unlock(&dt_atom_mutex);
119 pthread_mutex_lock(&dt_atom_mutex);
121 pthread_mutex_unlock(&dt_atom_mutex);
126 pthread_mutex_lock(&dt_atom_mutex);
128 pthread_mutex_unlock(&dt_atom_mutex);
134 pthread_mutex_lock(&dt_atom_mutex);
136 pthread_mutex_unlock(&dt_atom_mutex);
142 pthread_mutex_lock(&dt_atom_mutex);
145 pthread_mutex_unlock(&dt_atom_mutex);
151 pthread_mutex_lock(&dt_atom_mutex);
154 pthread_mutex_unlock(&dt_atom_mutex);
160 pthread_mutex_lock(&dt_atom_mutex);
161 int origvalue = *var;
163 pthread_mutex_unlock(&dt_atom_mutex);
169 pthread_mutex_lock(&dt_atom_mutex);
170 int origvalue = *var;
172 if (origvalue == *expected)
177 *expected = origvalue;
178 pthread_mutex_unlock(&dt_atom_mutex);
184 pthread_mutex_lock(&dt_atom_mutex);
186 pthread_mutex_unlock(&dt_atom_mutex);
191 pthread_mutex_lock(&dt_atom_mutex);
193 pthread_mutex_unlock(&dt_atom_mutex);
#define TRUE
Definition ashift_lsd.c:162
#define FALSE
Definition ashift_lsd.c:158
void dt_atomic_set_int(dt_atomic_int *var, int value)
Definition atomic.h:65
int dt_atomic_get_int(dt_atomic_int *var)
Definition atomic.h:66
uint64_t dt_atomic_get_uint64(const dt_atomic_uint64 *var)
Definition atomic.h:68
typedef _Atomic(uint64_t) dt_atomic_uint64
atomic_int dt_atomic_int
Definition atomic.h:63
int dt_atomic_sub_int(dt_atomic_int *var, int decr)
Definition atomic.h:70
int dt_atomic_add_int(dt_atomic_int *var, int incr)
Definition atomic.h:69
void dt_atomic_set_uint64(dt_atomic_uint64 *var, uint64_t value)
Definition atomic.h:67
void dt_atomic_and_int(dt_atomic_int *var, int flags)
Definition atomic.h:76
int dt_atomic_CAS_int(dt_atomic_int *var, int *expected, int value)
Definition atomic.h:72
int dt_atomic_exch_int(dt_atomic_int *var, int value)
Definition atomic.h:71
void dt_atomic_or_int(dt_atomic_int *var, int flags)
Definition atomic.h:75
static const dt_aligned_pixel_simd_t value
Definition darktable.h:501
dt_mipmap_buffer_dsc_flags flags
Definition mipmap_cache.c:4
unsigned __int64 uint64_t
Definition strptime.c:74