这是' double + ='线程安全?

时间:2013-06-27 00:38:26

标签: c# parallel.foreach

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

mechanismScores[row] += cellValue;

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

Interlocked.CompareExchange(ref mechanismScores[row], 
    mechanismScores[row] + cellValue, mechanismScores[row]);

或其他解决方案?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

无论是什么类型的机制,它似乎是一个对象,所以一个简单的锁(mechanismScores)就可以了。如果在循环内,可以在不同的上下文中更改相同的值,而不是线程安全的。