执行以下操作
static object aggLock = new object();
static long max = 10000000;
static void Main(string[] args)
{
double totalSumSeq = 0;
double totalSumLock = 0;
// Seq
for (int i = 0; i < max; i++)
{
double y = Math.Sqrt(i);
totalSumSeq += y;
}
...
}
返回预期的 21,081,849,486.4393。
使用
// Parallel.For(from, to, init, body, finally);
Parallel.For(0, max, () => 0.0, (i, pls, y) => // (LoopVariable, ParallelLoopState, ThreadLocalVariable)
{
y = Math.Sqrt(i);
return y;
},
partSum =>
{
lock (aggLock)
{
totalSumLock += partSum;
}
}
);
相反,我得到了完全不同的值,比如在比赛条件下。为什么?