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;
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
void * Get(gpr_timespec *wait_time=nullptr)
int num_nodes() const
Definition: mpmcqueue.h:89
int count() const
Definition: mpmcqueue.h:73
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 * Get(gpr_timespec *wait_time=nullptr)=0
virtual void Put(void *elem)=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.
Internal thread interface.
Definition: backoff.h:26
TraceFlag DebugOnlyTraceFlag
Definition: trace.h:115
DebugOnlyTraceFlag grpc_thread_pool_trace
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