【简介】
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)
标签:队列,写入,环形,buffer,缓冲区,数据 From: https://www.cnblogs.com/xixixing/p/18160728