TPLで作成されたスレッドがいくつかあります。いくつかのスレッドは、何も変更することなく、含まれているListを単純に列挙することによって、特定のオブジェクトとやりとりします。他のスレッドはリストに項目を追加または削除します。現在、Listを変更するすべてのコードセグメントのListおよびLockステートメントを列挙するすべてのコードセグメントについて、lockステートメントがあります。C#TPL複数のリストの列挙子飢餓のない1つの修飾子
パフォーマンス上の問題は発生していません。そうです。しかし、私は効率的な解決策は多くの並行列挙子を許可し、リストを変更するときは他のすべてをロックすることであることを認識しています。現在、常に1つのスレッドのみがリストを列挙している可能性があります。将来の参照のために、これを可能にするパターンは何ですか?
重要。多くのケースでうまくいく多くのソリューションがありますが、私の場合はほとんど機能しません。私のアプリケーションでは、読者の弾圧が決して止まらない可能性が高いので、すべての修飾語が飢えています。私は最近、同時リストを実装しなければならなかった、とあなたはそれが助け場合はそれを試してみることが歓迎されている
Enumerate 1
Enumerate 2 Concurrent with 1
Modify 1 Request is Queued
Enumerate 3 Request is Queued because of Modify Request
Enumerate 4 Request is Queued
Modify 2 Request is Queued
Enumerate 2 Finishes
Enumerate 1 Finishes
Modify 1 Starts because all in-progress at time of request Enumerators Finished
Modify 1 Finishes
Enumerate 3 Starts because Queued Modify 1 Finished
Enumerate 4 Starts
Enumerate 3 Finishes
Enumerate 4 Finishes
Modify 2 Starts
...
コードの変更が必要なので、ConcurrentDictionaryに切り替えるのではないでしょうか? – weismat