CircularBuffer高效实现(线程安全且不是线程安全的)

jav*_*red 26 c#

有人可以建议好的CircularBuffer实现吗?我需要"非线程安全"和"线程安全"版本.我希望以下操作:

  • 在创建时提供缓冲区大小的能力
  • 添加元素
  • 迭代元素
  • 迭代时删除元素
  • 可能删除元素

我希望在速度和使用内存,平均和最差时间等方面高度优化实现.

我希望"非线程安全"实现非常快.我希望"线程安全"实现很快,可能使用"无锁代码"进行同步,如果速度需要,可以有一些限制.

如果缓冲区太小而无法存储新的(添加的)元素,则可以静默覆盖现有元素或引发异常.

我应该使用disruptor.net吗?

添加链接到一个很好的示例Disruptor.NET示例

Ser*_*rvy -6

非线程安全:

System.Collections.Generic.Queue

线程安全:

System.Collections.Concurrent.ConcurrentQueue

或者

System.Collections.Concurrent.BlockingCollection (内部默认使用并发队列)

尽管从技术上讲,您确实不应该使用术语“线程安全”。 简直太暧昧了。第一个不是设计为由多个线程同时使用的,其余的都是。

  • -1 这是一个糟糕的答案,因为所提出的解决方案实际上都不是循环缓冲区(它们要么随意扩展,要么耗尽空间) (46认同)
  • @Servy .NET 队列类不是循环缓冲区。它们在内部使用循环缓冲区,但它们本身并不是循环缓冲区。根据定义,循环缓冲区的大小是固定的。 (20认同)
  • 这就是为什么我想要真正的循环缓冲区。我希望循环缓冲区根本不使用“新内存”。这在密集使用时非常方便。 (5认同)
  • @piers7是的,它们*是*循环缓冲区。当它们用完空间并复制数据时,它们会创建一个新的循环缓冲区,但这并不意味着它们不是循环缓冲区。该问题不要求所讨论的数据结构只能手动扩展,而不是从不或自动扩展。如果您自己有这样的要求,您可以自由地提出自己的问题。 (5认同)