]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/common/QueueRing.h
update sources to v12.1.0
[ceph.git] / ceph / src / common / QueueRing.h
index 830f80f8442e0e9934790f96cfcfd61f7d7af245..42582d24f4462c508ae357e8f9256aeda2d0540f 100644 (file)
@@ -1,12 +1,12 @@
 #ifndef QUEUE_RING_H
 #define QUEUE_RING_H
 
-#include <list>
-#include <vector>
 #include "common/Mutex.h"
 #include "common/Cond.h"
 
-
+#include <list>
+#include <atomic>
+#include <vector>
 
 template <class T>
 class QueueRing {
@@ -43,18 +43,20 @@ class QueueRing {
 
   std::vector<QueueBucket> buckets;
   int num_buckets;
-  atomic_t cur_read_bucket;
-  atomic_t cur_write_bucket;
+
+  std::atomic<int64_t> cur_read_bucket = { 0 };
+  std::atomic<int64_t> cur_write_bucket = { 0 };
+
 public:
   QueueRing(int n) : buckets(n), num_buckets(n) {
   }
 
   void enqueue(const T& entry) {
-    buckets[cur_write_bucket.inc() % num_buckets].enqueue(entry);
+    buckets[++cur_write_bucket % num_buckets].enqueue(entry);
   };
 
   void dequeue(T *entry) {
-    buckets[cur_read_bucket.inc() % num_buckets].dequeue(entry);
+    buckets[++cur_read_bucket % num_buckets].dequeue(entry);
   }
 };