77 void push(
const value_type& x);
79 template <
class... Args>
void emplace(Args&&... args);
81 bool pop(value_type& x);
91 explicit node_t(value_type* value): next(pointer_t(nullptr, 0)), value(value) {}
92 std::atomic<pointer_t> next;
93 std::atomic<value_type*> value =
nullptr;
98 lock_free_queue(
const lock_free_queue&);
99 lock_free_queue& operator=(
const lock_free_queue&);
101 template <
class... Args> value_type* make_value(Args&&... args);
102 void free_value(value_type* value);
103 void push_value(value_type* value);
104 node_t* make_node(value_type* x);
105 void free_node(node_t* node);
107 alignas(LASS_LOCK_FREE_ALIGNMENT) std::atomic<pointer_t> head_;
108 alignas(LASS_LOCK_FREE_ALIGNMENT) std::atomic<pointer_t> tail_;
109 allocator_t node_allocator_;
110 allocator_t value_allocator_;