J'ai plusieurs threads créés par le TPL (probablement pas pertinent). Certains threads interagissent avec un objet particulier simplement en énumérant une liste contenue sans jamais modifier quoi que ce soit. D'autres threads ajoutent ou suppriment des éléments de la liste. Actuellement, j'ai une instruction de verrouillage autour de tous les segments de code qui énumèrent les instructions List et lock autour de tous les segments de code qui modifient la liste. Je n'ai pas de problèmes de performance, c'est tout. Cependant, je me rends compte que la solution la plus efficace consisterait à autoriser plusieurs énumérateurs simultanés et à ne verrouiller que tout le reste lors de la modification de la liste. Actuellement, un seul thread peut être en train d'énumérer la liste à un moment donné. Pour référence future, quel est le modèle qui permet cela?C# Liste des énumérateurs multiples de liste TPL Un modificateur sans mésaventure
Important. Il y a beaucoup de solutions qui fonctionnent bien dans beaucoup de cas mais très probablement ne fonctionneront pas pour le mien. Dans mon application, il y a de fortes chances que le barrage des lecteurs ne s'arrête jamais - affamant ainsi tous les modificateurs. Je cherche:
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
...
Je suppose que vous n'êtes pas passer à ConcurrentDictionary, car cela nécessiterait des modifications de code - non? – weismat