Является ли этот конкретный Parallel.For () l oop поточно-ориентированным? - PullRequest
0 голосов
/ 15 января 2020
Parallel.For(0, someStringArray.Count, (i) =>
{
    someStringArray[i] = someStringArray[i].Trim();
});

Я уверен, что только чтение через коллекцию с Parallel.For считается поточно-ориентированным.

РЕДАКТИРОВАТЬ: Массив не доступ через другие части кода.

1 Ответ

1 голос
/ 15 января 2020

Является ли этот конкретный Parallel.For() l oop поточно-ориентированным?

В зависимости от реализации типа someStringArray, это до тех пор, пока вы не изменяете сама коллекция при перечислении.

Никогда два потока не изменяют один и тот же элемент в коллекции в вашем примере.

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

Это не должно происходить с массивами фиксированного размера. List<T> использует массив под капотом, но это деталь реализации, на которую не следует полагаться в общем случае.

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