新しい名前空間System.Collections.Concurrentには、他のクラスの中でも、ディクショナリ、キュー、およびスタックの同時コレクションが含まれています。ConcurrentListがないのはなぜですか?
アップデート
現在のシナリオを説明する新しい質問を投稿しました。私は、元の質問の全体的な意味を変えるよりも、それを好みました。新しい質問へのリンクは次のとおりです。
新しい名前空間System.Collections.Concurrentには、他のクラスの中でも、ディクショナリ、キュー、およびスタックの同時コレクションが含まれています。ConcurrentListがないのはなぜですか?
現在のシナリオを説明する新しい質問を投稿しました。私は、元の質問の全体的な意味を変えるよりも、それを好みました。新しい質問へのリンクは次のとおりです。
ランダムアクセスは、別のスレッドから変更されたデータ構造ではあまり意味がありません。
並行コレクションを見ると、それらのインターフェースがマルチスレッドアクセスでうまく機能するように特別に設計されていることがわかります。マルチスレッドコードでうまく機能する便利なリストのようなインターフェイスは考えられません。
ランダムなマルチスレッドアクセスは、要素が移動されない場合に意味がありますが、配列があります。
2つのスレッドが同時にアイテムを追加した場合、「順序」にどのような期待がありますか? ConcurrentBagは、アイテムのコレクションだけが必要な場合に適しています。
2011年に、スレッドセーフでロックフリーで、一部のインターフェイスを実装するConcurrentList<T>
クラス( GitHubで利用可能なコード)を作成しました。IList<T>
Add
特に、サポートされていない以外のリストを変更する操作。つまり、追加のみのコレクションです。したがって、、Insert
などRemoveAt
は機能しません。