одновременный доступ к списку в C # - PullRequest
0 голосов
/ 05 мая 2018

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

Ответы [ 4 ]

0 голосов
/ 05 мая 2018

Управление объектами, на которые есть ссылки в списке в параллельных потоках, может привести к конфликтам в объектах, связанных с состоянием объекта.
Управление элементами в списке может вызвать конфликты в коллекциях, так как в фоновом режиме происходит много вещей, например, перераспределение буферов или копирование элементов при добавлении новых элементов.
Вы должны позаботиться об обоих.
Для списков, нацеленных на .Net 4, вы можете использовать " rel="nofollow noreferrer"> System.Collections.Concurrent Пространство имен.

0 голосов
/ 05 мая 2018

Обычно нет встроенной защиты. Существуют коллекции, которые являются поточно-ориентированными (см., Например, https://docs.microsoft.com/en-us/dotnet/api/system.collections.concurrent?view=netframework-4.7.2), и исходные коллекции имели свойство Synchronized, которое можно использовать, но по умолчанию коллекции не являются поточно-ориентированными.

0 голосов
/ 05 мая 2018

C # Списки не являются потокобезопасными.

.NET Framework 4 представляет поточно-ориентированные коллекции в пространстве имен System.Collections.Concurrent .

Вы можете использовать ConcurrentBag<T> вместо List<T>

0 голосов
/ 05 мая 2018

Конкретная реализация позволит лучше ответить на ваш вопрос, но, возможно, этого будет достаточно. Списки в C # не являются потокобезопасными. Если вы ищете коллекции с поддержкой потоков, ознакомьтесь с этим документом: Коллекции с поддержкой потоков

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...