c/c++ linux后台开发 3.2.2无锁队列

无锁队列使用场景

至少每秒十几万读写才考虑使用,否则没有意义

循环数组无锁队列实现

这个队列结构简单,有大小上限,可以适用于多写多读的情况
接口

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值