双缓存静态循环队列(一)

一、在数据采集通讯处理场景中应用中,数据收发缓存使用很多。常用的是生产者/消费者模式数据缓存。

基于几点考虑实现该数据缓存队列(FIFO)模块。

1) 内存管理:固定内存大小分配,不使用动态分配。

2) 存取速度:用数组通过游标计算实现循环队列,无数据拷贝移动等开销实现数据插入移除的快速实现。

3) 线程可重入:使用关键字段临界锁

4) 读写锁冲突处理:使用双缓存结构,减小临界锁粒度,降低读写锁的冲突访问。对于读写频繁的操作可显著提高读写性能

5) 应用模式:FIFO数据队列

6) 无锁算法:常用的 CAS无锁算法,本质上也只是降低了锁的粒度,同时其有的复杂性,很难进行扩充和修改。

    从业务角度找到合适的方法和数据设计,不使用普适的无锁算法。

 

二、类定义以及文件说明

类: CCritcalS

文件:CritcalS.h   CritcalS.cpp

说明:自定义临界锁,禁止重复加锁

 

类:CBufQueue

文件:BufQueue.h   BufQueue.cpp

说明:静态FIFO循环队列实现

 

类:CTwoBufQueue

文件:TwoBufQueue.h   TwoBufQueue.cpp

说明:双缓存队列。减少读写操作的互斥冲突,类乒乓寻存储原理

 

posted on 2016-04-05 10:02  雁北  阅读(758)  评论(0编辑  收藏  举报

导航