У меня есть несколько потоков, созданных с помощью TPL (вероятно, не актуально). Некоторые потоки взаимодействуют с конкретным объектом, просто перечисляя содержащийся список без каких-либо изменений. Другие темы добавляют или удаляют элементы из списка. В настоящее время у меня есть оператор блокировки вокруг всех сегментов кода, которые перечисляют список, и операторы блокировки вокруг всех сегментов кода, которые изменяют список.
У меня нет проблем с производительностью, вот и все. Тем не менее, я понимаю, что более эффективным решением было бы позволить многим параллельным перечислителям и блокировать все остальное при изменении списка. В настоящее время только один поток может перечислять список в любой момент времени. Для дальнейшего использования, какой шаблон это позволяет?
Важно . Есть много решений, которые отлично работают во многих случаях, но, скорее всего, не будут работать для меня. В моем приложении есть хороший шанс, что шквал читателей никогда не прекратится - тем самым истощая все модификаторы. Я ищу:
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
...