#include template class lock_free_stack { private: struct node { T data; node* next; node(T const& data_): data(data_) {} }; std::atomic head; public: void push(T const& data) { node* const new_node=new node(data); new_node->next=head.load(); while(!head.compare_exchange_weak(new_node->next,new_node)); } };