这个'do​​uble + ='线程安全吗?

Rob*_*b L 2 c# parallel.foreach

这行代码正在Parallel.For(... row => {code})中执行;

mechanismScores[row] += cellValue;
Run Code Online (Sandbox Code Playgroud)

数组值和cellValue都是double类型.这个线程是安全的还是我需要做...

Interlocked.CompareExchange(ref mechanismScores[row], 
    mechanismScores[row] + cellValue, mechanismScores[row]);
Run Code Online (Sandbox Code Playgroud)

或其他解决方案?

svi*_*ick 6

如果您有并行循环,其中每次迭代访问数组中的不同项,并且没有其他代码同时访问该数组,那么您的代码是线程安全的.

如果两次迭代可以访问数组中的相同索引,则需要某种同步,通过使用lockInterlocked.CompareExchange()正确使用(正如Michael Burr指出的那样,您的示例不安全).