我找到了两种从数组中获取 Max 值的不同方法,但我不太喜欢并行编程,所以我真的不明白。
我想知道这种方法是否也能做同样的事情,还是我错过了什么?我真的没有太多关于他们的信息。连评论都没有...
第一种方法:
int[] vec = ... (I guess the content doesn't matter)
static int naiveMax()
{
int max = vec[0];
object obj = new object();
Parallel.For(0, vec.Length, i =>
{
lock (obj) {
if (vec[i] > max) max = vec[i];
}
});
return max;
}
第二个:
static int Max()
{
int max = vec[0];
object obj = new object();
Parallel.For(0, vec.Length, //could be Parallel.For<int>
() => vec[0],
(i, loopState, partial) =>
{
if(vec[i]>partial) partial = vec[i];
return partial;
},
partial => {
lock (obj) {
if( partial > max) max = partial;
}
});
return max;
}
这些是做同样的事情还是做不同的事情?谢谢 ;)