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

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

ОБНОВИТЬ

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

3 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам