@@ -16,10 +16,10 @@ typedef struct {
16
16
void * freelist [QSBR_N_EPOCHS ][QSBR_FREELIST_SIZE ];
17
17
} qsbr_pthread_data_t ;
18
18
19
- /* TODO: write with C11 Atomics */
20
- #define CAS ( addr , oldv , newv ) \
21
- __sync_bool_compare_and_swap((addr), (oldv), (newv) )
22
- #define FETCH_AND_ADD (addr , v ) __sync_fetch_and_add ((addr), (v))
19
+ #define CAS ( addr , oldv , newv ) \
20
+ __atomic_compare_exchange(( addr), &( oldv), &( newv), 0, __ATOMIC_RELAXED, \
21
+ __ATOMIC_RELAXED )
22
+ #define FETCH_AND_ADD (addr , v ) __atomic_fetch_add ((addr), (v), __ATOMIC_RELAXED )
23
23
#define MEM_BARRIER () __sync_synchronize()
24
24
25
25
static long n_threads = 0 ;
@@ -285,7 +285,8 @@ static int lf_list_write_cs_exit(lf_list_pthread_data_t *lf_list_data)
285
285
it_rec -> epoch = epoch ;
286
286
}
287
287
288
- if (CAS (& it_rec -> rec_next , NULL , new_rec )) {
288
+ const void * nullptr = NULL ;
289
+ if (CAS (& it_rec -> rec_next , nullptr , new_rec )) {
289
290
new_rec -> epoch = epoch ;
290
291
new_rec -> slots [0 ]-> epoch = epoch ;
291
292
new_rec -> slots [1 ]-> epoch = epoch ;
0 commit comments