用c++写一个无锁队列
时间: 2024-11-24 21:23:13 浏览: 7
c++11无锁队列的一种简单实现.pptx
在C++中,可以使用`std::atomic`模板和条件变量来创建一个基本的无锁队列,它允许多个线程并发地添加和删除元素。这里是一个简单的无锁队列(FIFO,先进先出)实现示例:
```cpp
#include <atomic>
#include <condition_variable>
#include <mutex>
#include <queue>
template <typename T>
class NoLockQueue {
public:
void push(const T& item) {
data.push(item);
cv.notify_one();
}
bool try_pop(T& item) {
std::unique_lock<std::mutex> lock(mutex_);
while (data.empty()) {
cv.wait(lock);
}
item = data.front();
data.pop();
return true;
}
private:
std::queue<T> data;
mutable std::mutex mutex_;
std::condition_variable cv;
};
```
在这个实现中:
- `push`方法将元素添加到队列尾部,并唤醒等待的线程。
- `try_pop`方法尝试从队列头部取出一个元素。如果队列为空,则持有互斥锁等待直到有元素加入。
注意,这是一个非常基础的无锁队列实现,适用于某些特定场景,例如处理器间通信(IPC)。在实际生产环境中,可能会需要更复杂的方案来处理竞争条件、内存管理和性能优化。
阅读全文