Почему нет ConcurrentList <T> - PullRequest
       52

Почему нет ConcurrentList <T>

1 голос
/ 26 октября 2011

Новое пространство имен System.Collections.Concurrent содержит параллельные коллекции для словаря, очереди и стека среди других классов.Кто-нибудь знает, почему не существует ConcurrentList?

ОБНОВЛЕНИЕ

Я опубликовал новый вопрос, объясняющий мой текущий сценарий.Я предпочел это изменению всего смысла исходного вопроса.Вот ссылка на новый вопрос.

Ответы [ 3 ]

5 голосов
/ 26 октября 2011

Если бы две темы добавили элементы одновременно, чего бы вы ожидали от «заказа»? ConcurrentBag более подходит, если все, что вам нужно, это набор предметов.

5 голосов
/ 26 октября 2011

Произвольный доступ не имеет большого смысла для структуры данных, которая изменилась из другого потока.

Если вы посмотрите на одновременные коллекции, вы заметите, что их интерфейс специально разработан для работы с несколькимирезьбовой доступ.Я не могу придумать полезного интерфейса, похожего на список, который хорошо работает с многопоточным кодом.

Случайный многопоточный доступ может иметь смысл, если элементы никогда не перемещаются, но тогда у вас есть массив.

0 голосов
/ 05 апреля 2013

В 2011 году Я написал ConcurrentList<T> класс (код доступен на GitHub ), который является поточно-ориентированным, без блокировки и реализует некоторые интерфейса IList<T>.

Примечательно, что любые операции, изменяющие список, кроме Add, не поддерживаются;т.е. это коллекция только для добавления.Так что Insert, RemoveAt и т. Д. Не работают.

...