下面是一个简单的无锁队列的最大元素数校验代码示例:
#include <atomic>
template<typename T>
class LockFreeQueue {
private:
struct Node {
T data;
Node* next;
Node(const T& value) : data(value), next(nullptr) {}
};
std::atomic<Node*> head;
std::atomic<Node*> tail;
std::atomic<int> count;
public:
LockFreeQueue() : head(nullptr), tail(nullptr), count(0) {}
void push(const T& value) {
Node* newNode = new Node(value);
newNode->next = nullptr;
Node* prevTail = tail.exchange(newNode, std::memory_order_acq_rel);
if (prevTail != nullptr)
prevTail->next = newNode;
count.fetch_add(1, std::memory_order_release);
}
bool pop(T& value) {
if (head == nullptr)
return false;
Node* oldHead = head.load(std::memory_order_acquire);
Node* newHead = oldHead->next;
if (newHead == nullptr)
return false;
value = newHead->data;
head.store(newHead, std::memory_order_release);
delete oldHead;
count.fetch_sub(1, std::memory_order_release);
return true;
}
int size() const {
return count.load(std::memory_order_relaxed);
}
};
该代码实现了一个基于CAS(Compare-And-Swap)操作的无锁队列。通过原子操作保证数据的一致性,避免使用互斥锁带来的开销,并且支持并发环境下的线程安全操作。
你可以根据需要使用该无锁队列类,并调用 push
方法将元素入队,调用 pop
方法将元素出队,并可使用 size
方法获取当前队列中的元素个数。
内容由零声教学AI助手提供,问题来源于学员提问