배열에서 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;
}
이 동일하거나 뭔가 개의 다른과 무엇을해야합니까? 고마워;)
저 자물쇠에 회전하는 엄청난 양이있을 것 같은 저에게 보입니다./당신은 그것들을 모두 시험해보고 그 차이를 보지 그래요? –
두 방법 모두 병렬 코드를 순차적으로 실행하여 많은 리소스를 낭비합니다. – dtb
잠금을 사용하지 않아도 (순차 코드가 병렬이 아니기 때문에) 작은 계산은 병렬 실행에 가장 적합하지 않습니다. 오버 헤드는 계산에 사용 된 시간보다 높습니다. –