环形队列

【简介】

ring buffer / circular buffer 又名环形队列 / 环形缓冲区,其通过开辟固定尺寸的内存来实现反复复用同一块内存的目的。由于预先开辟了固定尺寸的内容,所以当数据满的时候,可以有两种处理方式,具体使用哪一种按照实际需求,具体如下:

1)当队列满的时候,新来的数据会覆盖最古老的数据,这种数据结构的特点是数据的写入不会因为队列满了而停止,同时也会导致旧数据的丢失,常用在一些对老旧数据不敏感的场景。如果数据很重要且不希望被丢弃,那么不要使用这种覆盖的模式,比如 流媒体场景下,每一帧数据都要确保完整地被渲染出来,不然会出现跳帧和音画同步无法完成等问题,所以不适合这种模式。

2)当数据满的时候,block 或者禁止写入操作,直到队列有空间时再允许写入。这种模式下可以保证数据不被覆盖掉。

 

【实现】

boost库直接有现成的,参考 VS2015编译并配置boost 64位 - 夕西行 - 博客园 (cnblogs.com)

也可以自己实现,思路参考:

 [common c/c++] ring buffer/circular buffer 环形队列/环形缓冲区_c++ ringbuffer-CSDN博客

多线程环形缓冲区 - IAmAProgrammer - 博客园 (cnblogs.com)

posted @ 2024-04-26 19:17  夕西行  阅读(6)  评论(0编辑  收藏  举报