27 #ifndef EMBB_CONTAINERS_LOCK_FREE_MPMC_QUEUE_H_ 28 #define EMBB_CONTAINERS_LOCK_FREE_MPMC_QUEUE_H_ 30 #include <embb/base/atomic.h> 31 #include <embb/base/function.h> 33 #include <embb/containers/lock_free_tree_value_pool.h> 34 #include <embb/containers/object_pool.h> 35 #include <embb/containers/internal/hazard_pointer.h> 41 namespace containers {
51 template<
typename Type >
52 class LockFreeMPMCQueueNode {
70 LockFreeMPMCQueueNode();
75 LockFreeMPMCQueueNode(
106 template<
typename Type,
133 delete_pointer_callback;
138 typedef embb::containers::internal::HazardPointer
139 < internal::LockFreeMPMCQueueNode<Type>* >
140 MPMCQueueNodeHazardPointer_t;
145 MPMCQueueNodeHazardPointer_t hazardPointer;
162 void DeletePointerCallback(internal::LockFreeMPMCQueueNode<Type>* to_delete);
196 size_t GetCapacity();
212 Type
const& element);
234 #include <embb/containers/internal/lock_free_mpmc_queue-inl.h> 236 #endif // EMBB_CONTAINERS_LOCK_FREE_MPMC_QUEUE_H_ Definition: lock_free_mpmc_queue.h:40
Lock-free queue for multiple producers and multiple consumers.
Definition: lock_free_mpmc_queue.h:109
Class representing atomic variables.
Definition: atomic.h:60
Lock-free value pool using binary tree construction.
Definition: lock_free_tree_value_pool.h:57
Pool for thread-safe management of arbitrary objects.
Definition: object_pool.h:59
Wraps function pointers, member function pointers, and functors with up to five arguments.
Definition: function.h:94