28 return ::InterlockedIncrement(
reinterpret_cast<volatile LONG*
>(i));
31 return ::InterlockedDecrement(
reinterpret_cast<volatile LONG*
>(i));
34 static void ReleaseStore(
volatile int* i,
int value) { *i = value; }
36 return ::InterlockedCompareExchange(
reinterpret_cast<volatile LONG*
>(i),
37 new_value, old_value);
46 return static_cast<T*
>(::InterlockedCompareExchangePointer(
47 reinterpret_cast<PVOID volatile*
>(ptr), new_value, old_value));
50 static int Increment(
volatile int* i) {
return __sync_add_and_fetch(i, 1); }
51 static int Decrement(
volatile int* i) {
return __sync_sub_and_fetch(i, 1); }
53 return __atomic_load_n(i, __ATOMIC_ACQUIRE);
56 __atomic_store_n(i, value, __ATOMIC_RELEASE);
59 return __sync_val_compare_and_swap(i, old_value, new_value);
64 return __atomic_load_n(ptr, __ATOMIC_ACQUIRE);
68 return __sync_val_compare_and_swap(ptr, old_value, new_value);
Definition AgoraAtomicOps.h:23
static int CompareAndSwap(volatile int *i, int old_value, int new_value)
Definition AgoraAtomicOps.h:35
static T * AcquireLoadPtr(T *volatile *ptr)
Definition AgoraAtomicOps.h:41
static void ReleaseStore(volatile int *i, int value)
Definition AgoraAtomicOps.h:34
static T * CompareAndSwapPtr(T *volatile *ptr, T *old_value, T *new_value)
Definition AgoraAtomicOps.h:45
static int Increment(volatile int *i)
Definition AgoraAtomicOps.h:27
static int AcquireLoad(volatile const int *i)
Definition AgoraAtomicOps.h:33
static int Decrement(volatile int *i)
Definition AgoraAtomicOps.h:30
Definition AgoraAtomicOps.h:21