12 #include "lockfreenode.h" 15 template <
typename T,
class TMemInterface >
class class_alignment
lock_free_node_stack :
public TMemInterface
24 ts_debug_only(debug.counter = 0;);
27 void push_front(node_type *_node)
29 ts_debug_only(assert(_node->next.node ==
nullptr););
30 atomic_node_ptr copy, newNode;
34 newNode.data.access.as_atomic = copy.data.access.as_atomic + 1;
35 newNode.data.points_to.node = _node;
36 _node->next.node = head.data.points_to.node;
37 }
while (!head.compare_exchange_weak(copy, newNode));
41 node_type *pop_front()
43 atomic_node_ptr copy, inc_copy;
47 if (copy.data.points_to.node ==
nullptr)
52 inc_copy.data.access.as_atomic = copy.data.access.as_atomic + 1;
53 inc_copy.data.points_to.node = copy.data.points_to.node->next.node;
55 }
while (!head.compare_exchange_weak(copy, inc_copy));
58 ts_debug_only(copy.data.points_to.node->next.node =
nullptr;);
59 return copy.data.points_to.node;
62 bool empty() {
return head.data.points_to.node ==
nullptr; }
70 struct debug_container
74 ts_debug_only(debug_container debug;);
int64_t increment(volatile int64_t &_data)
Increments the specified data.
Definition: atomics.h:32
Class stl_allocator.
Definition: allocator.h:16
Definition: lockfreenodestack.h:15
int64_t decrement(volatile int64_t &_data)
Decrements the specified data.
Definition: atomics.h:39
Definition: lockfreenode.h:24
Definition: lockfreenode.h:55