这行代码正在Parallel.For(... row => {code})中执行;
mechanismScores[row] += cellValue;
数组值和cellValue都是 double 类型。这个线程是安全的还是我需要做类似的事情......
Interlocked.CompareExchange(ref mechanismScores[row],
mechanismScores[row] + cellValue, mechanismScores[row]);
或其他解决方案?
答案 0 :(得分:6)
如果您有并行循环,其中每次迭代访问数组中的不同项,并且没有其他代码同时访问该数组,那么您的代码是线程安全的。
如果两次迭代可以访问数组中的相同索引,则需要使用lock
或正确使用Interlocked.CompareExchange()
进行某种同步(正如Michael Burr指出的那样,您的示例是不安全)。
答案 1 :(得分:0)
无论是什么类型的机制,它似乎是一个对象,所以一个简单的锁(mechanismScores)就可以了。如果在循环内,可以在不同的上下文中更改相同的值,而不是线程安全的。