2

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

mechanismScores[row] += cellValue;

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

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

或其他解决方案?

4

2 回答 2

6

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

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

于 2013-06-27T04:24:02.150 回答
0

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

于 2013-06-27T00:45:26.653 回答