mirror of https://github.com/grpc/grpc.git
Retire the old atomic_with_atm.h and atomic_with_std.h as they are not needed anymore. Introduce helper methods which call GPR_ATM_INC_ADD_THEN and GPR_ATM_INC_CAS_THEN, and use them everywhere. Also introduce AtomicIncrementIfNonzero, originally authored by vjpai@. This is going to be used for completion queues.pull/18059/head
parent
7e57732a1f
commit
508c8d805a
15 changed files with 69 additions and 135 deletions
@ -1,57 +0,0 @@ |
|||||||
/*
|
|
||||||
* |
|
||||||
* Copyright 2017 gRPC authors. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* |
|
||||||
*/ |
|
||||||
|
|
||||||
#ifndef GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_ATM_H |
|
||||||
#define GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_ATM_H |
|
||||||
|
|
||||||
#include <grpc/support/port_platform.h> |
|
||||||
|
|
||||||
#include <grpc/support/atm.h> |
|
||||||
|
|
||||||
namespace grpc_core { |
|
||||||
|
|
||||||
enum MemoryOrderRelaxed { memory_order_relaxed }; |
|
||||||
|
|
||||||
template <class T> |
|
||||||
class atomic; |
|
||||||
|
|
||||||
template <> |
|
||||||
class atomic<bool> { |
|
||||||
public: |
|
||||||
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(bool& expected, bool update, MemoryOrderRelaxed, |
|
||||||
MemoryOrderRelaxed) { |
|
||||||
if (!gpr_atm_no_barrier_cas(&x_, static_cast<gpr_atm>(expected), |
|
||||||
static_cast<gpr_atm>(update))) { |
|
||||||
expected = gpr_atm_no_barrier_load(&x_) != 0; |
|
||||||
return false; |
|
||||||
} |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
private: |
|
||||||
gpr_atm x_; |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace grpc_core
|
|
||||||
|
|
||||||
#endif /* GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_ATM_H */ |
|
@ -1,35 +0,0 @@ |
|||||||
/*
|
|
||||||
* |
|
||||||
* Copyright 2017 gRPC authors. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
* |
|
||||||
*/ |
|
||||||
|
|
||||||
#ifndef GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_STD_H |
|
||||||
#define GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_STD_H |
|
||||||
|
|
||||||
#include <grpc/support/port_platform.h> |
|
||||||
|
|
||||||
#include <atomic> |
|
||||||
|
|
||||||
namespace grpc_core { |
|
||||||
|
|
||||||
template <class T> |
|
||||||
using atomic = std::atomic<T>; |
|
||||||
|
|
||||||
typedef std::memory_order memory_order; |
|
||||||
|
|
||||||
} // namespace grpc_core
|
|
||||||
|
|
||||||
#endif /* GRPC_CORE_LIB_GPRPP_ATOMIC_WITH_STD_H */ |
|
Loading…
Reference in new issue