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