我只是在了解新的.NET 4.0功能。我正在尝试使用Parallel.For
和普通的for(x;x;x)
循环进行简单的计算。
然而,我大约50%的时间得到不同的结果。
long sum = 0;
Parallel.For(1, 10000, y =>
{
sum += y;
}
);
Console.WriteLine(sum.ToString());
sum = 0;
for (int y = 1; y < 10000; y++)
{
sum += y;
}
Console.WriteLine(sum.ToString());
我猜测多个线程同时尝试更新“sum”变量。
有没有明显的方法可以避免这种情况?
sum += y;
时,实际上每个线程都在同时说“把我加入到总和里!”你需要对它们关于共享资源sum
的通信进行同步。 - johnny g