实现可变大小的环形缓冲区?

时间:2019-06-29 20:49:38

标签: multithreading concurrency

我已经了解了使用环形缓冲区的想法,以及在处理过程中不必转移元素的方法。但是,我很好奇如何最好地处理线程安全且具有与环形缓冲区类似优点的可变长度缓冲区?我们可以在达到容量时将大小增加一倍,并在一个互斥锁中使用一个线程进行复制吗?这个只是可变大小的缓冲区是否只是一个实现线程安全的队列?最好的方法是什么?这种并发读/写访问的替代解决方案的优缺点是什么?

2 个答案:

答案 0 :(得分:2)

由于扩展环形缓冲区时不需要复制,因此链表可能更好。

答案 1 :(得分:2)

对于多线程生产者/消费者应用程序,当需要增长时,通常不再使用单个循环缓冲区。

我通常会切换到固定大小的一次性FIFO缓冲区的无锁单链接列表,其中未使用的缓冲区可以循环存储在无锁堆栈中。

这里的非博克队列非常简单实用:https://www.cs.rochester.edu/u/scott/papers/1996_PODC_queues.pdf