|
|
@ -23,6 +23,10 @@ |
|
|
|
#include <stdbool.h> |
|
|
|
#include <stdbool.h> |
|
|
|
#include <stddef.h> |
|
|
|
#include <stddef.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
|
|
|
|
|
extern "C" { |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
// Multiple-producer single-consumer lock free queue, based upon the
|
|
|
|
// Multiple-producer single-consumer lock free queue, based upon the
|
|
|
|
// implementation from Dmitry Vyukov here:
|
|
|
|
// implementation from Dmitry Vyukov here:
|
|
|
|
// http://www.1024cores.net/home/lock-free-algorithms/queues/intrusive-mpsc-node-based-queue
|
|
|
|
// http://www.1024cores.net/home/lock-free-algorithms/queues/intrusive-mpsc-node-based-queue
|
|
|
@ -50,4 +54,8 @@ gpr_mpscq_node *gpr_mpscq_pop(gpr_mpscq *q); |
|
|
|
// Pop a node; sets *empty to true if the queue is empty, or false if it is not
|
|
|
|
// Pop a node; sets *empty to true if the queue is empty, or false if it is not
|
|
|
|
gpr_mpscq_node *gpr_mpscq_pop_and_check_end(gpr_mpscq *q, bool *empty); |
|
|
|
gpr_mpscq_node *gpr_mpscq_pop_and_check_end(gpr_mpscq *q, bool *empty); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
#endif /* GRPC_CORE_LIB_SUPPORT_MPSCQ_H */ |
|
|
|
#endif /* GRPC_CORE_LIB_SUPPORT_MPSCQ_H */ |
|
|
|