Write out atomic<bool> explicitly

pull/10676/head
Craig Tiller 8 years ago
parent 90ce723aca
commit 284195faab
  1. 16
      src/core/lib/support/atomic_with_atm.h

@ -41,17 +41,21 @@ namespace grpc_core {
enum MemoryOrderRelaxed { memory_order_relaxed };
template <class T>
class atomic {
class atomic;
template <>
class atomic<bool> {
public:
static_assert(sizeof(T) <= sizeof(gpr_atm),
"Atomics of size > sizeof(gpr_atm) are not supported");
atomic() { gpr_atm_no_barrier_store(&x_, static_cast<gpr_atm>(T())); }
atomic() { gpr_atm_no_barrier_store(&x_, static_cast<gpr_atm>(false)); }
explicit atomic(bool x) {
gpr_atm_no_barrier_store(&x_, static_cast<gpr_atm>(x));
}
bool compare_exchange_strong(T& expected, T update, MemoryOrderRelaxed,
bool compare_exchange_strong(bool& expected, bool update, MemoryOrderRelaxed,
MemoryOrderRelaxed) {
if (!gpr_atm_no_barrier_cas(&x_, static_cast<gpr_atm>(expected),
static_cast<gpr_atm>(update))) {
expected = static_cast<T>(gpr_atm_no_barrier_load(&x_));
expected = gpr_atm_no_barrier_load(&x_) != 0;
return false;
}
return true;

Loading…
Cancel
Save