配列から Max 値を取得する 2 つの異なる方法を見つけましたが、並列プログラミングはあまり好きではないので、よくわかりません。
このメソッドは同じことをするのだろうか、それとも何か足りないのでしょうか? 私は本当に彼らについて多くの情報を持っていません。コメントすらない…
最初の方法:
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;
}
そして2番目のもの:
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;
}
これらは同じことをしますか、それとも何か違うことをしますか? ありがとう ;)