编译一个无锁栈
时间: 2023-10-20 21:07:14 浏览: 73
以下是一个简单的 C++ 实现无锁栈的代码:
```c++
#include <atomic>
template <typename T>
class LockFreeStack {
private:
struct Node {
T data;
Node* next;
Node(const T& data) : data(data), next(nullptr) {}
};
std::atomic<Node*> top_;
public:
LockFreeStack() : top_(nullptr) {}
void push(const T& data) {
Node* new_node = new Node(data);
// 使用 CAS 操作将新节点插入栈顶
Node* old_top = top_.load();
do {
new_node->next = old_top;
} while (!top_.compare_exchange_weak(old_top, new_node));
}
bool pop(T& data) {
Node* old_top = top_.load();
if (old_top == nullptr) {
return false;
}
// 使用 CAS 操作将栈顶指针下移一位
while (!top_.compare_exchange_weak(old_top, old_top->next)) {
if (old_top == nullptr) {
return false;
}
}
data = old_top->data;
delete old_top;
return true;
}
};
```
这个实现使用了 C++11 中的原子操作 `std::atomic` 和 `compare_exchange_weak`,并且使用了动态内存分配来管理节点的内存。这个实现仅供参考,实际应用中可能需要根据具体需求进行修改和优化。
阅读全文