2014-01-30 3 views
0

PLINQ를 배우고 있습니다. 나는 사이트에서 주어진 예제를 시도했다. 그러나 나는 결과가 잘못되었다는 것을 알 수 있으며 여러 번 프로그램을 다시 실행할 때도 달라집니다. 먼저 모든 소수를 제공하지 않으며 초당 9591 개의 무작위 소수를 제공합니다.PLINQ 결과가 잘못되어 실행마다 다름

IEnumerable<int> numbers = Enumerable.Range (3, 100000-3); 

var parallelQuery = 
    from n in numbers.AsParallel() 
    where Enumerable.Range (2, (int) Math.Sqrt (n)).All (i => n % i > 0) 
    select n; 

int[] primes = parallelQuery.ToArray(); 

감사합니다.

+1

어떻게 달라질까요? 숫자를 정렬하지 않기 때문에 숫자의 순서가 다를 수 있습니다. – Kaerber

+0

3에서 (100000-3)까지, 9591보다 큰 소수가 있지만 9591 소수 만 표시하고 나머지는 표시하지 않습니다. –

+0

당신은 범위를 포함하지 않습니다 2, 내 대답 좀 봐. – Kaerber

답변

7

100,000 미만의 소수 9592가 있으며 범위에 소수 2 인 2가 포함되지 않습니다.

소수를 정렬하지 않으므로 PLINQ가 작업을 병렬 청크로 분할하는 방법을 제어 할 수 없기 때문에 소수점의 순서는 달라집니다.

+0

감사합니다. Kaerber. 나는 PLINQ와 전통적인 스레드를 비교하고 있었다. 내 전통적인 쓰레드 로직에서는 문제가 생겨서 결과가 잘못되었다. –