原理
初始化一个固定大小的数组,生产者指针指向写的位置,消费者指针指向读的位置,当指针到达数组尾部时从头开始,当两个指针在相同位置表示队列为空,当生产者指针的下一个位置为消费者指针时表示队列满
代码实现
#pragma once
#include <iostream>
#define DEFAULE_LIST_SIZE 128
template <class T>
class NoMtxList
{
public:
NoMtxList(uint32_t capacity)
{
_capacity = capacity;
_data = new T[capacity];
}
NoMtxList()
{
_capacity = DEFAULE_LIST_SIZE;
_data = new T[_capacity];
}
~NoMtxList()
{
if (nullptr != _data)
{
delete _data;
_data = nullptr;
}
_capacity = 0; _writePos = 0;
_readPos = 0;
}
int push(const T& data)
{
if (isFull())
{
return -1;
}
_data[_writePos] = data;
_writePos = (_writePos + 1) % _capacity;
return 0;
}
int pop(T& data)
{
if (isEmpty())
{
return -1;
}
data = _data[_readPos];
_readPos = (_readPos + 1) % _capacity;
return 0;
}
bool isFull()
{
return _readPos == (_writePos + 1) % _capacity;
}
bool isEmpty()
{
return _readPos == _writePos;
}
private:
uint32_t _capacity = 0;
T* _data = nullptr;
uint32_t _writePos = 0;
uint32_t _readPos = 0;
};