小编Shi*_*raj的帖子

这是PLINQ错误吗?

为什么PLINQ输出与顺序处理和Parallel.For循环不同

我想添加10,000,000个数字的平方根.以下是3个案例的代码:

顺序循环:

double sum = 0.0;
for(int i = 1;i<10000001;i++)
sum += Math.Sqrt(i);
Run Code Online (Sandbox Code Playgroud)

输出为:21081852648.717

现在使用Parallel.For循环:

object locker = new object();
double total ;

Parallel.For(1,10000001,
()=>0.0,
(i,state,local)=> local+Math.Sqrt(i),
(local)=>
{
  lock(locker){ total += local; }
}
);
Run Code Online (Sandbox Code Playgroud)

输出为:21081852648.7199

现在使用PLINQ

double tot =  ParallelEnumerable.Range(1, 10000000)
                .Sum(i => Math.Sqrt(i)); 
Run Code Online (Sandbox Code Playgroud)

输出为:21081852648.72

为什么PLINQ输出和Parallel.For和Sequential for loop之间有区别?

parallel-processing parallel-extensions plinq task-parallel-library

2
推荐指数
1
解决办法
244
查看次数