2009-07-27 10 views

答えて

3

一般的なコレクションクラスのスレッドセーフティは疑わしい値です - スレッドセーフであるためには、多くの場合、個別の操作(Addやインデクサなど)は必要ありませんが、グループスレッドセーフであることを保証します。たとえば、あるスレッドが新しいアイテムをコレクションに挿入し、別のスレッドがインデクサーを介してループ内のアイテムにアクセスしても、コレクション上のそれらのメソッドの両方がロックされていてもコードはロックされていても問題ありません。つまり、Hashtableのような、System.Collectionsの古い非ジェネリックコレクションクラスはスレッドセーフです。

今スレッドセーフQueueStackクラスは彼らの省略は、設計によって、実際にはないので、(そのプロトコルの制限は一般的な同時アクセスに適するよう)実際に有用であるが、監督のより多くの(または、より多くの可能性が高いです、制約されたリソース)。順不同、スレッドセーフを表し

ConcurrentBag :しかし、あなたは

+0

ああ、そうです。 SyncRoot私は信じています。 –

1

これらは.NET 4.0に存在します。私はSystem.Threading.Collections名前空間を信じています(または、私が最後に見たCTPの名前空間です)。

0

に.NET 4.0にConcurrentQueueConcurrentStackが表示されます.NET 4.0 FrameworkがSystem.Collections.Concurrent名前空間内のいくつかのスレッドセーフなコレクションを紹介しますオブジェクトのコレクション。

ConcurrentDictionary 複数のスレッドが同時にアクセスできる、キーと値のペアのスレッドセーフなコレクションを表します。

ConcurrentQueue スレッドセーフな先入れ先出し(FIFO)コレクションを表します。

ConcurrentStack スレッドセーフなLIFO(last-in-first out)コレクションを表します。

関連する問題