环形缓冲区Ring buffer

在固定容量存储上循环推进读写位置。

核心约束
读写位置回绕;需区分空与满。
适用问题
有界流、生产者消费者、低分配开销缓冲。
边界与取舍
容量耗尽策略和并发内存序需要单独设计。
CD空空AB012345head = 4tail = 2
读序为 A、B、C、D:索引从 5 回到 0。head 指向下一次读取位置,tail 指向下一次写入位置;此例用一个空槽区分满与空。

常见操作#

C 为固定容量;n 为当前元素数;b 为一次批量复制的元素数。

操作时间复杂度条件与说明
入队 / 出队一个元素O(1)O(1)推进读写位置并回绕;满时拒绝、覆盖或等待由调用方约定。
查看空闲量 / 已用量O(1)O(1)维护读写位置,并明确空满判定;并发读到的量可能只是边界估计。
批量读写O(b)O(b)回绕时至多拆成两段;不包含等待数据的时间。
遍历现存数据O(n)O(n)从读位置访问到写位置;并发修改时需额外协议。

时间与空间#

时间复杂度
单元素入队 / 出队 O(1)O(1)
存储空间
O(C)O(C)

固定容量不自动扩容。单生产者单消费者仍需正确的发布顺序与内存屏障。

工程中的应用#

1 个案例 · 附源码
基础原理参考资料

Linux 6.12 · Circular Buffers环形下标、可用空间计算与单生产者单消费者的内存屏障。

7 个概念