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

Circular buffer with two indexes

我想制作一个有两个索引的循环缓冲区:

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

如何阻塞线程直到有事情发生?

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

它是线程安全的:它有一个 Add() method to add items and a blocking Take() method 阻塞 ("pauses the calling thread") 直到一个项目可用。

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