24template<
typename T,
typename Traits = ConcurrentQueueDefaultTraits>
37 typedef typename std::make_signed<size_t>::type
ssize_t;
87 : inner(std::move(
other.inner)), sema(std::move(
other.sema))
92 return swap_internal(
other);
102 swap_internal(
other);
108 if (
this == &
other) {
112 inner.
swap(other.inner);
113 sema.swap(other.sema);
139 if ((details::likely)(inner.
enqueue(std::move(
item)))) {
152 if ((details::likely)(inner.
enqueue(token,
item))) {
165 if ((details::likely)(inner.
enqueue(token, std::move(
item)))) {
178 template<
typename It>
194 template<
typename It>
263 template<
typename It>
278 template<
typename It>
296 if (sema->tryWait()) {
312 if (sema->tryWait()) {
326 template<
typename It>
342 template<
typename It>
361 while (!sema->wait()) {
392 template<
typename U,
typename Rep,
typename Period>
404 while (!sema->wait()) {
435 template<
typename U,
typename Rep,
typename Period>
446 template<
typename It>
464 template<
typename It>
480 template<
typename It,
typename Rep,
typename Period>
491 template<
typename It>
509 template<
typename It>
525 template<
typename It,
typename Rep,
typename Period>
540 return (
size_t)sema->availableApprox();
554 template<
typename U,
typename A1,
typename A2>
555 static inline U* create(
A1&&
a1,
A2&&
a2)
557 void*
p = (Traits::malloc)(
sizeof(
U));
558 return p !=
nullptr ?
new (
p)
U(std::forward<A1>(
a1), std::forward<A2>(
a2)) :
nullptr;
562 static inline void destroy(U* p)
571 ConcurrentQueue inner;
572 std::unique_ptr<LightweightSemaphore, void (*)(LightweightSemaphore*)> sema;
576template<
typename T,
typename Traits>
Definition blockingconcurrentqueue.h:26
size_t wait_dequeue_bulk_timed(It itemFirst, size_t max, std::chrono::duration< Rep, Period > const &timeout)
Definition blockingconcurrentqueue.h:481
bool enqueue_bulk(producer_token_t const &token, It itemFirst, size_t count)
Definition blockingconcurrentqueue.h:195
void wait_dequeue(U &item)
Definition blockingconcurrentqueue.h:359
bool wait_dequeue_timed(consumer_token_t &token, U &item, std::int64_t timeout_usecs)
Definition blockingconcurrentqueue.h:420
ConcurrentQueue::consumer_token_t consumer_token_t
Definition blockingconcurrentqueue.h:33
void swap(BlockingConcurrentQueue &other) MOODYCAMEL_NOEXCEPT
Definition blockingconcurrentqueue.h:100
static const std::uint32_t EXPLICIT_CONSUMER_CONSUMPTION_QUOTA_BEFORE_ROTATE
Definition blockingconcurrentqueue.h:44
bool try_enqueue(T &&item)
Definition blockingconcurrentqueue.h:223
bool try_enqueue_bulk(producer_token_t const &token, It itemFirst, size_t count)
Definition blockingconcurrentqueue.h:279
size_t try_dequeue_bulk(It itemFirst, size_t max)
Definition blockingconcurrentqueue.h:327
BlockingConcurrentQueue(BlockingConcurrentQueue &&other) MOODYCAMEL_NOEXCEPT
Definition blockingconcurrentqueue.h:86
BlockingConcurrentQueue(size_t minCapacity, size_t maxExplicitProducers, size_t maxImplicitProducers)
Definition blockingconcurrentqueue.h:67
static const size_t IMPLICIT_INITIAL_INDEX_SIZE
Definition blockingconcurrentqueue.h:42
bool try_enqueue_bulk(It itemFirst, size_t count)
Definition blockingconcurrentqueue.h:264
static const size_t EXPLICIT_INITIAL_INDEX_SIZE
Definition blockingconcurrentqueue.h:41
bool wait_dequeue_timed(U &item, std::chrono::duration< Rep, Period > const &timeout)
Definition blockingconcurrentqueue.h:393
BlockingConcurrentQueue & operator=(BlockingConcurrentQueue &&other) MOODYCAMEL_NOEXCEPT
Definition blockingconcurrentqueue.h:90
static constexpr bool is_lock_free()
Definition blockingconcurrentqueue.h:547
size_t wait_dequeue_bulk_timed(It itemFirst, size_t max, std::int64_t timeout_usecs)
Definition blockingconcurrentqueue.h:465
size_t size_approx() const
Definition blockingconcurrentqueue.h:538
BlockingConcurrentQueue(size_t capacity=6 *BLOCK_SIZE)
Definition blockingconcurrentqueue.h:58
std::make_signed< size_t >::type ssize_t
Definition blockingconcurrentqueue.h:37
static const size_t BLOCK_SIZE
Definition blockingconcurrentqueue.h:39
static const size_t INITIAL_IMPLICIT_PRODUCER_HASH_SIZE
Definition blockingconcurrentqueue.h:43
bool enqueue(producer_token_t const &token, T &&item)
Definition blockingconcurrentqueue.h:163
bool try_dequeue(U &item)
Definition blockingconcurrentqueue.h:294
static const size_t MAX_SUBQUEUE_SIZE
Definition blockingconcurrentqueue.h:45
size_t wait_dequeue_bulk(It itemFirst, size_t max)
Definition blockingconcurrentqueue.h:447
bool enqueue(T const &item)
Definition blockingconcurrentqueue.h:123
bool enqueue_bulk(It itemFirst, size_t count)
Definition blockingconcurrentqueue.h:179
bool enqueue(producer_token_t const &token, T const &item)
Definition blockingconcurrentqueue.h:150
void wait_dequeue(consumer_token_t &token, U &item)
Definition blockingconcurrentqueue.h:402
bool wait_dequeue_timed(U &item, std::int64_t timeout_usecs)
Definition blockingconcurrentqueue.h:377
size_t wait_dequeue_bulk_timed(consumer_token_t &token, It itemFirst, size_t max, std::chrono::duration< Rep, Period > const &timeout)
Definition blockingconcurrentqueue.h:526
bool wait_dequeue_timed(consumer_token_t &token, U &item, std::chrono::duration< Rep, Period > const &timeout)
Definition blockingconcurrentqueue.h:436
bool enqueue(T &&item)
Definition blockingconcurrentqueue.h:137
bool try_enqueue(producer_token_t const &token, T &&item)
Definition blockingconcurrentqueue.h:247
bool try_enqueue(T const &item)
Definition blockingconcurrentqueue.h:209
bool try_enqueue(producer_token_t const &token, T const &item)
Definition blockingconcurrentqueue.h:235
ConcurrentQueue::producer_token_t producer_token_t
Definition blockingconcurrentqueue.h:32
ConcurrentQueue::size_t size_t
Definition blockingconcurrentqueue.h:36
size_t wait_dequeue_bulk_timed(consumer_token_t &token, It itemFirst, size_t max, std::int64_t timeout_usecs)
Definition blockingconcurrentqueue.h:510
ConcurrentQueue::index_t index_t
Definition blockingconcurrentqueue.h:35
size_t wait_dequeue_bulk(consumer_token_t &token, It itemFirst, size_t max)
Definition blockingconcurrentqueue.h:492
bool try_dequeue(consumer_token_t &token, U &item)
Definition blockingconcurrentqueue.h:310
static const size_t EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD
Definition blockingconcurrentqueue.h:40
BlockingConcurrentQueue(BlockingConcurrentQueue const &) MOODYCAMEL_DELETE_FUNCTION
size_t try_dequeue_bulk(consumer_token_t &token, It itemFirst, size_t max)
Definition blockingconcurrentqueue.h:343
BlockingConcurrentQueue & operator=(BlockingConcurrentQueue const &) MOODYCAMEL_DELETE_FUNCTION
Definition concurrentqueue.h:768
bool try_dequeue(U &item)
Definition concurrentqueue.h:1125
static const size_t MAX_SUBQUEUE_SIZE
Definition concurrentqueue.h:787
static const size_t INITIAL_IMPLICIT_PRODUCER_HASH_SIZE
Definition concurrentqueue.h:780
bool enqueue_bulk(It itemFirst, size_t count)
Definition concurrentqueue.h:1037
void swap(ConcurrentQueue &other) MOODYCAMEL_NOEXCEPT
Definition concurrentqueue.h:955
static const std::uint32_t EXPLICIT_CONSUMER_CONSUMPTION_QUOTA_BEFORE_ROTATE
Definition concurrentqueue.h:781
ConcurrentQueue(size_t capacity=32 *BLOCK_SIZE)
Definition concurrentqueue.h:813
static constexpr bool is_lock_free()
Definition concurrentqueue.h:1338
static const size_t IMPLICIT_INITIAL_INDEX_SIZE
Definition concurrentqueue.h:779
bool try_enqueue(T const &item)
Definition concurrentqueue.h:1060
static const size_t EXPLICIT_BLOCK_EMPTY_COUNTER_THRESHOLD
Definition concurrentqueue.h:777
Traits::size_t size_t
Definition concurrentqueue.h:774
bool enqueue(T const &item)
Definition concurrentqueue.h:995
Traits::index_t index_t
Definition concurrentqueue.h:773
static const size_t EXPLICIT_INITIAL_INDEX_SIZE
Definition concurrentqueue.h:778
static const size_t BLOCK_SIZE
Definition concurrentqueue.h:776
bool try_enqueue_bulk(It itemFirst, size_t count)
Definition concurrentqueue.h:1101
Definition lightweightsemaphore.h:269
std::make_signed< std::size_t >::type ssize_t
Definition lightweightsemaphore.h:271
#define MOODYCAMEL_NOEXCEPT
Definition concurrentqueue.h:207
#define MOODYCAMEL_THROW(expr)
Definition concurrentqueue.h:183
#define MOODYCAMEL_DELETE_FUNCTION
Definition concurrentqueue.h:233
Definition blockingconcurrentqueue.h:20
void swap(BlockingConcurrentQueue< T, Traits > &a, BlockingConcurrentQueue< T, Traits > &b) MOODYCAMEL_NOEXCEPT
Definition blockingconcurrentqueue.h:577
Definition concurrentqueue.h:717
Definition concurrentqueue.h:652