// -*- c++ -*- #ifndef SYNC_H #define SYNC_H class sync { public: template static bool compare_and_swap(T *address, T oldValue, T newValue) { return __sync_bool_compare_and_swap(address, oldValue, newValue); } template static T increment(T *address) { return __sync_add_and_fetch(address, 1); } template static T decrement(T *address) { return __sync_sub_and_fetch(address, 1); } template static T increment(T &address) { return __sync_add_and_fetch(&address, 1); } template static T decrement(T &address) { return __sync_sub_and_fetch(&address, 1); } template static T read(T *address) { return __sync_add_and_fetch(address, 0); } template static T read(T &address) { return __sync_add_and_fetch(&address, 0); } }; #endif /* SYNC_H */