28#if defined(__cplusplus) && __cplusplus > 201100
38{
return std::atomic_compare_exchange_strong(var,expected,value); }
40#elif !defined(__STDC_NO_ATOMICS__)
51{
return atomic_compare_exchange_strong(var,expected,value); }
53#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNU_MINOR__ >= 8))
60{
int value ; __atomic_load(var,&value,__ATOMIC_SEQ_CST);
return value; }
65{
int orig; __atomic_exchange(var,&value,&orig,__ATOMIC_SEQ_CST);
return orig; }
67{
return __atomic_compare_exchange(var,expected,&value,0,__ATOMIC_SEQ_CST,__ATOMIC_SEQ_CST); }
74extern pthread_mutex_t dt_atom_mutex;
79 pthread_mutex_lock(&dt_atom_mutex);
81 pthread_mutex_unlock(&dt_atom_mutex);
86 pthread_mutex_lock(&dt_atom_mutex);
88 pthread_mutex_unlock(&dt_atom_mutex);
94 pthread_mutex_lock(&dt_atom_mutex);
97 pthread_mutex_unlock(&dt_atom_mutex);
103 pthread_mutex_lock(&dt_atom_mutex);
106 pthread_mutex_unlock(&dt_atom_mutex);
112 pthread_mutex_lock(&dt_atom_mutex);
113 int origvalue = *var;
115 pthread_mutex_unlock(&dt_atom_mutex);
121 pthread_mutex_lock(&dt_atom_mutex);
122 int origvalue = *var;
124 if (origvalue == *expected)
129 *expected = origvalue;
130 pthread_mutex_unlock(&dt_atom_mutex);
#define TRUE
Definition ashift_lsd.c:151
#define FALSE
Definition ashift_lsd.c:147
void dt_atomic_set_int(dt_atomic_int *var, int value)
Definition atomic.h:45
int dt_atomic_get_int(dt_atomic_int *var)
Definition atomic.h:46
atomic_int dt_atomic_int
Definition atomic.h:44
int dt_atomic_sub_int(dt_atomic_int *var, int decr)
Definition atomic.h:48
int dt_atomic_add_int(dt_atomic_int *var, int incr)
Definition atomic.h:47
int dt_atomic_CAS_int(dt_atomic_int *var, int *expected, int value)
Definition atomic.h:50
int dt_atomic_exch_int(dt_atomic_int *var, int value)
Definition atomic.h:49