自分でRingBufferを実装しましたが、.NETにはないことに驚いています。または単にスレッドセーフのキュー、リスト、またはコレクションですか?.NETにはスレッドセーフな汎用クラスがありますか?
.NETにスレッドセーフなクラスが含まれていないのはなぜですか?彼らは将来のために計画されていますか?
自分でRingBufferを実装しましたが、.NETにはないことに驚いています。または単にスレッドセーフのキュー、リスト、またはコレクションですか?.NETにはスレッドセーフな汎用クラスがありますか?
.NETにスレッドセーフなクラスが含まれていないのはなぜですか?彼らは将来のために計画されていますか?
一般的なコレクションクラスのスレッドセーフティは疑わしい値です - スレッドセーフであるためには、多くの場合、個別の操作(Add
やインデクサなど)は必要ありませんが、グループスレッドセーフであることを保証します。たとえば、あるスレッドが新しいアイテムをコレクションに挿入し、別のスレッドがインデクサーを介してループ内のアイテムにアクセスしても、コレクション上のそれらのメソッドの両方がロックされていてもコードはロックされていても問題ありません。つまり、Hashtable
のような、System.Collections
の古い非ジェネリックコレクションクラスはスレッドセーフです。
今スレッドセーフQueue
とStack
クラスは彼らの省略は、設計によって、実際にはないので、(そのプロトコルの制限は一般的な同時アクセスに適するよう)実際に有用であるが、監督のより多くの(または、より多くの可能性が高いです、制約されたリソース)。順不同、スレッドセーフを表し
ConcurrentBag :しかし、あなたは
これらは.NET 4.0に存在します。私はSystem.Threading.Collections名前空間を信じています(または、私が最後に見たCTPの名前空間です)。
に.NET 4.0にConcurrentQueue
とConcurrentStack
が表示されます.NET 4.0 FrameworkがSystem.Collections.Concurrent名前空間内のいくつかのスレッドセーフなコレクションを紹介しますオブジェクトのコレクション。
ConcurrentDictionary 複数のスレッドが同時にアクセスできる、キーと値のペアのスレッドセーフなコレクションを表します。
ConcurrentQueue スレッドセーフな先入れ先出し(FIFO)コレクションを表します。
ConcurrentStack スレッドセーフなLIFO(last-in-first out)コレクションを表します。
ああ、そうです。 SyncRoot私は信じています。 –