Сохраняет ли LINQ AsParallel () безопасность потоков? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть некоторые сомнения по поводу параллелизма с использованием LINQ AsParallel().

Предположим, у меня есть следующий код:

int counter = 0;
someList.AsParallel().ForEach(item => {
    doStuff();
    counter++;
});

Я не нашел много онлайн ...

Безопасно ли делать что-то подобное? Есть ли лучший способ сделать это?

Должен ли я выполнить какое-либо блокирующее действие для counter?

Заранее спасибо

1 Ответ

0 голосов
/ 28 июня 2018

Безопасно ли делать что-то подобное? (counter++)

номер

Для начала нет никакой безопасности потока, только однопоточный код.

Когда вы идете параллельно, вы должны убедиться, что все поточно-ориентировано.
В этом случае:

//counter++;
Interlocked.Increment(ref counter);

И мы не можем видеть, что делает DoStuff(). Все вызовы должны быть независимыми (или использовать форму блокировки).

...