17 atomic(
const T& value = 0) : value(value) { }
18 T inc() {
return __sync_add_and_fetch(&value, 1); }
19 T dec() {
return __sync_sub_and_fetch(&value, 1); }
20 T inc(T val) {
return __sync_add_and_fetch(&value, val); }
21 T dec(T val) {
return __sync_sub_and_fetch(&value, val); }
36 return __sync_bool_compare_and_swap(&a, oldval, newval);
42 return __sync_bool_compare_and_swap(reinterpret_cast<uint64_t*>(&a),
43 *reinterpret_cast<const uint64_t*>(&oldval),
44 *reinterpret_cast<const uint64_t*>(&newval));
49 return __sync_bool_compare_and_swap(reinterpret_cast<uint32_t*>(&a),
50 *reinterpret_cast<const uint32_t*>(&oldval),
51 *reinterpret_cast<const uint32_t*>(&newval));
55 void atomic_exchange(T& a, T& b) {
56 b =__sync_lock_test_and_set(&a, b);