#include
#include
#include
#include
#include
template
class LockFreeStack {
private:
struct Node {
T data;
Node* next;
Node(const T& value) : data(value), next(nullptr) {}
};
std::atomic head;
public:
LockFreeStack() : head(nullptr) {}
void push(const T& value) {
Node* newNode = new Node(value);
newNode->next = head.load();
while (!head.compare_exchange_weak(newNode->next, newNode)) {}
//这个循环体为空,一直在while里面判断并交换,直到交换成功执行,然后,!之后,条件不成立了,继续后面执行
std::cout << 'Thread ' << std::this_thread::get_id() << ' ( pushed: '
<< value << std::endl;
}
bool pop(T& value) {
Node* oldHead = head.load();
while (oldHead && !head.comp
#include
#include
#include
#include
template
class LockFreeStack {
private:
struct Node {
T data;
Node* next;
Node(const T& value) : data(value), next(nullptr) {}
};
std::atomic head;
public:
LockFreeStack() : head(nullptr) {}
void push(const T& value) {
Node* newNode = new Node(value);
newNode->next = head.load();
while (!head.compare_exchange_weak(newNode->next, newNode)) {}
//这个循环体为空,一直在while里面判断并交换,直到交换成功执行,然后,!之后,条件不成立了,继续后面执行
std::cout << 'Thread ' << std::this_thread::get_id() << ' (
}
bool pop(T& value) {
Node* oldHead = head.load();
while (oldHead && !head.comp
