19 #ifndef GRPC_CORE_LIB_IOMGR_EXECUTOR_MPMCQUEUE_H 20 #define GRPC_CORE_LIB_IOMGR_EXECUTOR_MPMCQUEUE_H 40 virtual void Put(
void*
elem) = 0;
48 virtual int count()
const = 0;
105 uint64_t num_started;
106 uint64_t num_completed;
135 void PushWaiter(Waiter* waiter);
138 void RemoveWaiter(Waiter* waiter);
148 static const int kDeleteListInitSize = 1024;
150 static const int kQueueInitNumNodes = 1024;
152 Node** delete_list_ =
nullptr;
154 size_t delete_list_count_ = 0;
155 size_t delete_list_size_ = 0;
158 Node* queue_head_ =
nullptr;
159 Node* queue_tail_ =
nullptr;
160 Atomic<int> count_{0};
170 Node* AllocateNodes(
int num);
virtual void Put(void *elem)=0
~InfLenFIFOQueue()
Definition: mpmcqueue.cc:94
void Put(void *elem)
Definition: mpmcqueue.cc:102
Definition: mpmcqueue.h:34
Unmeasurable clock type: no base, created by taking the difference between two times.
Definition: gpr_types.h:42
Definition: mpmcqueue.h:75
virtual ~MPMCQueueInterface()
Definition: mpmcqueue.h:36
Round Robin Policy.
Definition: backend_metric.cc:24
int init_num_nodes() const
Definition: mpmcqueue.h:92
void * content
Definition: mpmcqueue.h:78
gpr_timespec insert_time
Definition: mpmcqueue.h:79
int count() const
Definition: mpmcqueue.h:73
Node * prev
Definition: mpmcqueue.h:77
Definition: mpmcqueue.h:51
T Load(MemoryOrder order) const
Definition: atomic.h:44
Node * next
Definition: mpmcqueue.h:76
virtual void * Get(gpr_timespec *wait_time=nullptr)=0
virtual int count() const =0
int num_nodes() const
Definition: mpmcqueue.h:89
GPRAPI gpr_timespec gpr_time_0(gpr_clock_type type)
Time constants.
Definition: time.cc:46
InfLenFIFOQueue()
Definition: mpmcqueue.cc:79
Analogous to struct timespec.
Definition: gpr_types.h:47
DebugOnlyTraceFlag grpc_thread_pool_trace(false, "thread_pool")
Definition: mpmcqueue.h:30
void * Get(gpr_timespec *wait_time=nullptr)
Definition: mpmcqueue.cc:143
QueuedPick * next
Definition: client_channel.cc:113
Node()
Definition: mpmcqueue.h:81
grpc_call_element * elem
Definition: client_channel.cc:112