]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common: use atomic uin64_t for counter
authorPatrick Donnelly <pdonnell@redhat.com>
Thu, 27 Jul 2017 19:03:15 +0000 (12:03 -0700)
committerPatrick Donnelly <pdonnell@redhat.com>
Thu, 7 Sep 2017 04:22:09 +0000 (21:22 -0700)
Making this interface thread-safe...

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
src/include/counter.h

index d161c0b7dac61ba20b066ae3aed79594008213b3..61ed7409c7e4ff3107a2dc9bfadd7595fef71262 100644 (file)
@@ -15,6 +15,8 @@
 #ifndef CEPH_COUNTER_H
 #define CEPH_COUNTER_H
 
+#include <atomic>
+
 template <typename T>
 class Counter {
 public:
@@ -30,23 +32,23 @@ public:
   ~Counter() {
     _count()--;
   }
-  static unsigned long count() {
+  static uint64_t count() {
     return _count();
   }
-  static unsigned long increments() {
+  static uint64_t increments() {
     return _increments();
   }
-  static unsigned long decrements() {
+  static uint64_t decrements() {
     return increments()-count();
   }
 
 private:
-  static unsigned long &_count() {
-    static unsigned long c;
+  static std::atomic<uint64_t> &_count() {
+    static std::atomic<uint64_t> c;
     return c;
   }
-  static unsigned long &_increments() {
-    static unsigned long i;
+  static std::atomic<uint64_t> &_increments() {
+    static std::atomic<uint64_t> i;
     return i;
   }
 };