|
|
@@ -100,8 +100,8 @@ do { \ |
|
|
|
|
|
|
|
#define atomic_exchange(object, desired) \ |
|
|
|
({ \ |
|
|
|
typeof(object) _obj = (object); \ |
|
|
|
typeof(*object) _old; \ |
|
|
|
__typeof__(object) _obj = (object); \ |
|
|
|
__typeof__(*object) _old; \ |
|
|
|
do \ |
|
|
|
_old = atomic_load(_obj); \ |
|
|
|
while (!__sync_bool_compare_and_swap(_obj, _old, (desired))); \ |
|
|
@@ -113,8 +113,8 @@ do { \ |
|
|
|
|
|
|
|
#define atomic_compare_exchange_strong(object, expected, desired) \ |
|
|
|
({ \ |
|
|
|
typeof(object) _exp = (expected); \ |
|
|
|
typeof(*object) _old = *_exp; \ |
|
|
|
__typeof__(object) _exp = (expected); \ |
|
|
|
__typeof__(*object) _old = *_exp; \ |
|
|
|
*_exp = __sync_val_compare_and_swap((object), _old, (desired)); \ |
|
|
|
*_exp == _old; \ |
|
|
|
}) |
|
|
|