// @author Bo Hu (bhu@fb.com)
// @author Jordan DeLong (delong.j@fb.com)
-#ifndef PRODUCER_CONSUMER_QUEUE_H_
-#define PRODUCER_CONSUMER_QUEUE_H_
+#pragma once
#include <atomic>
#include <cassert>
#include <cstdlib>
+#include <memory>
#include <stdexcept>
#include <type_traits>
#include <utility>
}
bool isEmpty() const {
- return readIndex_.load(std::memory_order_consume) ==
- writeIndex_.load(std::memory_order_consume);
+ return readIndex_.load(std::memory_order_acquire) ==
+ writeIndex_.load(std::memory_order_acquire);
}
bool isFull() const {
- auto nextRecord = writeIndex_.load(std::memory_order_consume) + 1;
+ auto nextRecord = writeIndex_.load(std::memory_order_acquire) + 1;
if (nextRecord == size_) {
nextRecord = 0;
}
- if (nextRecord != readIndex_.load(std::memory_order_consume)) {
+ if (nextRecord != readIndex_.load(std::memory_order_acquire)) {
return false;
}
// queue is full
// be removing items concurrently).
// * It is undefined to call this from any other thread.
size_t sizeGuess() const {
- int ret = writeIndex_.load(std::memory_order_consume) -
- readIndex_.load(std::memory_order_consume);
+ int ret = writeIndex_.load(std::memory_order_acquire) -
+ readIndex_.load(std::memory_order_acquire);
if (ret < 0) {
ret += size_;
}
};
}
-
-#endif