具有两个索引的循环缓冲区

本文关键字:索引 循环 循环缓冲 缓冲区 两个 | 更新日期: 2023-09-27 18:13:03

我想创建一个循环缓冲区,它将有两个索引:

  • WriteIndex(由第一个线程控制)写入缓冲区中的新值
  • ReadIndex(由第二个线程控制)从缓冲区读取值并分析它

那么,当两个索引处于相同位置时,我如何暂停线程呢?我的意思是,如果你没有写任何新数据,你不能读它,所以如果writeindex和readindex在相同的位置,你只能写新数据,而不是读它。

如何阻止线程直到某些事情发生?

具有两个索引的循环缓冲区

您要查找的内容已经在BCL中:BlockingCollection<T> .

它是线程安全的:它有一个Add()方法来添加项目和一个阻塞Take()方法阻塞("暂停调用线程"),直到一个项目可用。

正如在一个现在被删除的评论中提到的:这确实不是一个真正的循环缓冲区,一旦达到最大值就会处理或覆盖项。不过,您可以设置集合大小的上限;这将使Add()阻塞直到有更多的空间。