具有两个索引的循环缓冲区
Circular buffer with two indexes
我想制作一个有两个索引的循环缓冲区:
- WriteIndex(由第一个线程控制)在缓冲区中写入新值
- ReadIndex(由第二个线程控制)从缓冲区读取值并分析它
那么,当两个索引处于同一位置时,如何暂停线程。
我的意思是,如果你没有写入任何新数据,你就无法读取它,所以如果 writeindex 和 readindex 在同一位置,你只能写入新数据,而不是读取它。
如何阻塞线程直到有事情发生?
您要查找的内容已在 BCL 中:BlockingCollection<T>
。
它是线程安全的:它有一个 Add()
method to add items and a blocking Take()
method 阻塞 ("pauses the calling thread") 直到一个项目可用。
正如现已删除的评论中所述:这确实不是真正的循环缓冲区,一旦达到最大值,它就会处理或覆盖项目。不过,您可以为集合大小设置上限;这将使 Add()
阻塞,直到有更多 space.
我想制作一个有两个索引的循环缓冲区:
- WriteIndex(由第一个线程控制)在缓冲区中写入新值
- ReadIndex(由第二个线程控制)从缓冲区读取值并分析它
那么,当两个索引处于同一位置时,如何暂停线程。 我的意思是,如果你没有写入任何新数据,你就无法读取它,所以如果 writeindex 和 readindex 在同一位置,你只能写入新数据,而不是读取它。
如何阻塞线程直到有事情发生?
您要查找的内容已在 BCL 中:BlockingCollection<T>
。
它是线程安全的:它有一个 Add()
method to add items and a blocking Take()
method 阻塞 ("pauses the calling thread") 直到一个项目可用。
正如现已删除的评论中所述:这确实不是真正的循环缓冲区,一旦达到最大值,它就会处理或覆盖项目。不过,您可以为集合大小设置上限;这将使 Add()
阻塞,直到有更多 space.