https://www.jianshu.com/p/3e122ee901c5
带有ABA问题 的无锁stack;
template <typename T>
class LockFreeStackT{
struct Node{
T val;
Node *next;
};
LockFreeStackT():head_(nullptr){}
void push(const T& val){
Node* node = new Node{val,head_.load()};
while(!head_.compare_exchange_strong(node->next,node)){
}
}
void pop(){
Node* node = head_.load();
while(node&&!head_.compare_exchange_strong(node,node->next)){
}
if(node) delete node;
}
private:
std::atomic<Node*> head_;
};