--------------------------------------------------------------------------------
标题: 固定尺寸内存块的缓冲队列类及实现源码
作者: 叶飞虎
日期: 2014.10.21
--------------------------------------------------------------------------------
在一般的线性操作应用中(如: 接收缓冲区), 可能需要频繁分配和释放内存块, 频繁操
作会给系统带来很大开销, 如何减少系统开销? 通过拉大分配和释放之间间距来降低操作的
频度, 从而达到减少系统开销。
拉大分配和释放之间间距的方法有很多, 可以通过大内存块自己管理, 也可以通过内存
块缓冲队列。本文着重讲内存块缓冲队列, 涉及队列就会考虑到无锁进出队列, 即进队列和
出队列在二个线程中可以同时操作。无锁队列的实现方法有很多, 有数组方式的环形无锁队
列, 也有链接方式的无锁队列。数组方式在队列容量确定时比较适合, 而链接方式更适合于
队列容量可变情况, 适用性更好。
数组方式无锁队列见我的博文 <在一读一写限制下,无锁环形队列如何实现?>
链接方式无锁队列见我的博文 <一读一写情况下,无锁队列如何实现?>
本文讲的缓冲队列为链接方式, 链接方式一般通过预分配一个结点作为接力点来实现无
锁队列, 优点是实现简单, 缺点是浪费一个结点的内存, 当结点内存块尺寸较大时浪费就大
了。如何不浪费一个结点内存的链接方式无锁队列? 当队列中只有一个结点时, 本缓冲队列
中使用了原子锁进行操作, 这是一种平衡策略, 若读者有更好方法不妨告之一下!
固定尺寸内存块的缓冲队列类(TKYCache)源码如下:
// ==&#