25#ifndef MYSQL_HARNESS_MPMC_UNBOUND_QUEUE_INCLUDED
26#define MYSQL_HARNESS_MPMC_UNBOUND_QUEUE_INCLUDED
108 node->
data = std::move(item);
130 Node *node =
nullptr;
137 if (new_head ==
nullptr) {
141 item = std::move(new_head->
data);
154 std::atomic<Node *>
next{
nullptr};
a unbounded multi-producer multi-consumer queue.
Definition: mpmc_queue.h:59
bool enqueue(T &&item)
enqueue an element.
Definition: mpmc_queue.h:106
std::mutex head_mutex_
Definition: mpmc_queue.h:157
bool dequeue(T &item)
try to dequeue element.
Definition: mpmc_queue.h:129
Node * tail_
Definition: mpmc_queue.h:160
~MPMCQueueMS2Lock()
Definition: mpmc_queue.h:65
Node * head_
Definition: mpmc_queue.h:159
bool enqueue(const T &item)
enqueue an element.
Definition: mpmc_queue.h:84
MPMCQueueMS2Lock()
Definition: mpmc_queue.h:63
std::mutex tail_mutex_
Definition: mpmc_queue.h:158
T value_type
Definition: mpmc_queue.h:61
provide waiting pop and push operator to thread-safe queues.
Definition: waiting_queue_adaptor.h:38
Definition: mpmc_queue.h:152
std::atomic< Node * > next
Definition: mpmc_queue.h:154
T data
Definition: mpmc_queue.h:153