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
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
Internal thread interface.
Definition: backoff.h:26
int init_num_nodes() const
Definition: mpmcqueue.h:92
GPRAPI gpr_timespec gpr_time_0(gpr_clock_type type)
Time constants.
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
void * Get(gpr_timespec *wait_time=nullptr)
virtual int count() const =0
int num_nodes() const
Definition: mpmcqueue.h:89
Analogous to struct timespec.
Definition: gpr_types.h:47
DebugOnlyTraceFlag grpc_thread_pool_trace
Node()
Definition: mpmcqueue.h:81
TraceFlag DebugOnlyTraceFlag
Definition: trace.h:115