Эта строка кода выполняется в Parallel.For (... row => {code});Является ли это «двойной + =» потоком безопасным?
mechanismScores[row] += cellValue;
Значения массива и CellValue оба типа двойного. Является ли эта нить безопасной или мне нужно что-то делать ...
Interlocked.CompareExchange(ref mechanismScores[row],
mechanismScores[row] + cellValue, mechanismScores[row]);
или еще одно решение?
Ни один из них не является безопасным. Два потока могут считывать одно и то же значение и увеличивать его. – SLaks
Кроме того, какой тип 'mechanScores'? – SLaks
'Interlocked.CompareExchange (ref механизмScores [строка], механизмScores [строка] + cellValue, механизмScores [строка])' небезопасно: вызов функции может оценивать два разных значения для 'mechanScores [row]' для второго и третьего аргументы, если другой поток изменял его одновременно. –