具有两个索引的循环缓冲区
本文关键字:索引 循环 循环缓冲 缓冲区 两个 | 更新日期: 2023-09-27 18:13:03
我想创建一个循环缓冲区,它将有两个索引:
- WriteIndex(由第一个线程控制)写入缓冲区中的新值
- ReadIndex(由第二个线程控制)从缓冲区读取值并分析它
那么,当两个索引处于相同位置时,我如何暂停线程呢?我的意思是,如果你没有写任何新数据,你不能读它,所以如果writeindex和readindex在相同的位置,你只能写新数据,而不是读它。
如何阻止线程直到某些事情发生?
您要查找的内容已经在BCL中:BlockingCollection<T>
.
它是线程安全的:它有一个Add()
方法来添加项目和一个阻塞Take()
方法阻塞("暂停调用线程"),直到一个项目可用。
正如在一个现在被删除的评论中提到的:这确实不是一个真正的循环缓冲区,一旦达到最大值就会处理或覆盖项。不过,您可以设置集合大小的上限;这将使Add()
阻塞直到有更多的空间。