无锁队列使用场景
至少每秒十几万读写才考虑使用,否则没有意义
循环数组无锁队列实现
这个队列结构简单,有大小上限,可以适用于多写多读的情况
接口
bool enqueue(const ELEM_T &a_data); // ⼊队列
bool dequeue(ELEM_T &a_data); // 出队列 bool
try_dequeue(ELEM_T &a_data); // 尝试⼊队列
成员
ELEM_T m_thequeue[Q_SIZE];
volatile QUEUE_INT m_count; // 队列的元素格式
volatile QUEUE_INT m_writeIndex;//新元素⼊列时存放位置在数组中的下标
volatile QUEUE_INT m_readIndex;//第一个有效数据
volatile QUEUE_INT m_maximumReadIndex; //指向第一个不能读取的数据(可能无效,可能正在写入)
//即[m_readIndex, m_maximumReadIndex)是可读的数据
inline QUEUE_INT countToIndex(QUEUE_INT a_count);
队列已满判断:(m_writeIndex + 1) %Q_SIZE == m_readIndex
队列为空判断:m_readIndex == m_maximumReadIndex
入队
bool