ctrl-utils
atomic.h
1 
10 #ifndef CTRL_UTILS_ATOMIC_H_
11 #define CTRL_UTILS_ATOMIC_H_
12 
13 #include <mutex> // std::mutex, std::lock_guard
14 #include <utility> // std::move
15 
16 namespace ctrl_utils {
17 
18 template<typename T>
19 class Atomic {
20 
21  public:
22 
23  Atomic() = default;
24 
25  Atomic(const T& value) : value_(value) {}
26  explicit Atomic(T&& value) : value_(std::move(value)) {}
27 
28  Atomic(const Atomic<T>& other) : value_(other.value_) {}
29  explicit Atomic(Atomic<T>&& other) : value_(std::move(other.value_)) {}
30 
31  Atomic<T>& operator=(const T& value) {
32  std::lock_guard<std::mutex> lock(mtx_);
33  value_ = value;
34  return *this;
35  }
36  Atomic<T>& operator=(T&& value) {
37  std::lock_guard<std::mutex> lock(mtx_);
38  value_ = std::move(value);
39  return *this;
40  }
41 
42  T load() const {
43  std::lock_guard<std::mutex> lock(mtx_);
44  return value_;
45  }
46 
47  private:
48 
49  T value_;
50  mutable std::mutex mtx_;
51 
52 };
53 
54 } // namespace ctrl_utils
55 
56 #endif // CTRL_UTILS_ATOMIC_H_
Definition: atomic.h:19
Definition: ctrl_utils.cc:18