30

誰かが良い CircularBuffer 実装を提案できますか? 「非スレッドセーフ」バージョンと「スレッドセーフ」バージョンの両方が必要です。私は次の操作を期待しています:

  • 作成時にバッファのサイズを提供する機能
  • 要素を追加する
  • 反復要素
  • 繰り返しながら要素を削除する
  • おそらく要素を削除します

速度と使用メモリ、平均時間と最悪時間などの点で、実装が高度に最適化されることを期待しています。

「スレッドセーフではない」実装は非常に高速になると思います。おそらく同期に「ロックフリーコード」を使用して、「スレッドセーフ」な実装が高速になることを期待しています。これが速度のために必要な場合は、いくつかの制限があっても問題ありません。

バッファーが小さすぎて新しい (追加された) 要素を格納できない場合は、既存の要素を黙ってオーバーライドするか、例外を発生させても問題ありません。

私はdisruptor.netを使うべきですか?

良い例へのリンクを追加するDisruptor.NET の例

4

1 に答える 1

-8

スレッドセーフではない:

System.Collections.Generic.Queue

スレッドセーフ:

System.Collections.Concurrent.ConcurrentQueue

また

System.Collections.Concurrent.BlockingCollection (デフォルトで内部的に同時キューを使用)

技術的には、「スレッドセーフ」という用語を使用するべきではありません。 それはあまりにも曖昧です。1 つ目は、複数のスレッドが同時に使用するようには設計されていませんが、残りは設計されています。

于 2012-11-07T18:40:00.253 に答える