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;
62 void Put(
void* elem)
override;
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);
T Load(MemoryOrder order) const
Definition: atomic.h:44
Definition: mpmcqueue.h:51
int count() const override
Definition: mpmcqueue.h:73
void Put(void *elem) override
Definition: mpmcqueue.cc:102
void * Get(gpr_timespec *wait_time) override
Definition: mpmcqueue.cc:143
int num_nodes() const
Definition: mpmcqueue.h:89
~InfLenFIFOQueue() override
Definition: mpmcqueue.cc:94
InfLenFIFOQueue()
Definition: mpmcqueue.cc:79
int init_num_nodes() const
Definition: mpmcqueue.h:92
Definition: mpmcqueue.h:34
virtual int count() const =0
virtual ~MPMCQueueInterface()
Definition: mpmcqueue.h:36
virtual void Put(void *elem)=0
virtual void * Get(gpr_timespec *wait_time)=0
@ GPR_TIMESPAN
Unmeasurable clock type: no base, created by taking the difference between two times.
Definition: gpr_types.h:42
GPRAPI gpr_timespec gpr_time_0(gpr_clock_type type)
Time constants.
Definition: time.cc:46
Round Robin Policy.
Definition: backend_metric.cc:26
DebugOnlyTraceFlag grpc_thread_pool_trace(false, "thread_pool")
Definition: mpmcqueue.h:30
Analogous to struct timespec.
Definition: gpr_types.h:47
Definition: mpmcqueue.h:75
Node * prev
Definition: mpmcqueue.h:77
Node * next
Definition: mpmcqueue.h:76
Node()
Definition: mpmcqueue.h:81
gpr_timespec insert_time
Definition: mpmcqueue.h:79
void * content
Definition: mpmcqueue.h:78