19 #ifndef GRPC_CORE_LIB_GPRPP_ATOMIC_H
20 #define GRPC_CORE_LIB_GPRPP_ATOMIC_H
31 RELAXED =
static_cast<int>(std::memory_order_relaxed),
32 CONSUME =
static_cast<int>(std::memory_order_consume),
33 ACQUIRE =
static_cast<int>(std::memory_order_acquire),
34 RELEASE =
static_cast<int>(std::memory_order_release),
35 ACQ_REL =
static_cast<int>(std::memory_order_acq_rel),
36 SEQ_CST =
static_cast<int>(std::memory_order_seq_cst)
42 explicit Atomic(T val = T()) : storage_(val) {}
45 return storage_.load(
static_cast<std::memory_order
>(order));
49 storage_.store(val,
static_cast<std::memory_order
>(order));
53 return storage_.exchange(desired,
static_cast<std::memory_order
>(order));
59 *expected, desired,
static_cast<std::memory_order
>(success),
60 static_cast<std::memory_order
>(failure)));
66 *expected, desired,
static_cast<std::memory_order
>(success),
67 static_cast<std::memory_order
>(failure)));
70 template <
typename Arg>
73 static_cast<Arg
>(arg),
static_cast<std::memory_order
>(order)));
76 template <
typename Arg>
79 static_cast<Arg
>(arg),
static_cast<std::memory_order
>(order)));
85 T count = storage_.load(std::memory_order_acquire);
99 std::atomic<T> storage_;
T Exchange(T desired, MemoryOrder order)
Definition: atomic.h:52
bool IncrementIfNonzero()
Definition: atomic.h:84
bool CompareExchangeStrong(T *expected, T desired, MemoryOrder success, MemoryOrder failure)
Definition: atomic.h:63
Atomic(T val=T())
Definition: atomic.h:42
void Store(T val, MemoryOrder order)
Definition: atomic.h:48
T FetchSub(Arg arg, MemoryOrder order=MemoryOrder::SEQ_CST)
Definition: atomic.h:77
bool CompareExchangeWeak(T *expected, T desired, MemoryOrder success, MemoryOrder failure)
Definition: atomic.h:56
T Load(MemoryOrder order) const
Definition: atomic.h:44
T FetchAdd(Arg arg, MemoryOrder order=MemoryOrder::SEQ_CST)
Definition: atomic.h:71
#define GPR_ATM_INC_ADD_THEN(blah)
Definition: atm_gcc_atomic.h:45
#define GPR_ATM_INC_CAS_THEN(blah)
Definition: atm_gcc_atomic.h:44
Round Robin Policy.
Definition: backend_metric.cc:26
MemoryOrder
Definition: atomic.h:30