Skip to content
Snippets Groups Projects
Commit 284195fa authored by Craig Tiller's avatar Craig Tiller
Browse files

Write out atomic<bool> explicitly

parent 90ce723a
No related branches found
No related tags found
No related merge requests found
...@@ -41,17 +41,21 @@ namespace grpc_core { ...@@ -41,17 +41,21 @@ namespace grpc_core {
enum MemoryOrderRelaxed { memory_order_relaxed }; enum MemoryOrderRelaxed { memory_order_relaxed };
template <class T> template <class T>
class atomic { class atomic;
template <>
class atomic<bool> {
public: public:
static_assert(sizeof(T) <= sizeof(gpr_atm), atomic() { gpr_atm_no_barrier_store(&x_, static_cast<gpr_atm>(false)); }
"Atomics of size > sizeof(gpr_atm) are not supported"); explicit atomic(bool x) {
atomic() { gpr_atm_no_barrier_store(&x_, static_cast<gpr_atm>(T())); } 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) { MemoryOrderRelaxed) {
if (!gpr_atm_no_barrier_cas(&x_, static_cast<gpr_atm>(expected), if (!gpr_atm_no_barrier_cas(&x_, static_cast<gpr_atm>(expected),
static_cast<gpr_atm>(update))) { 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 false;
} }
return true; return true;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment