Parallel.For и For дают разные результаты

Если я запускаю этот тест:

 var r = new Random();
 var ints = new int[13];
 Parallel.For(0, 2000000, i => {            
     var result = r.Next(1, 7) + r.Next(1, 7);
     ints[result] += 1;
 });

Я получаю следующий результат:

2: 92,14445
3: 0,41765
4: 0,62245
5: 0,82525
6: 1,04035
7: 1,25215
8: 1,0531
9: 0,8341
10: 0,6334
11: 0,4192
12: 0,2109

Когда я использую обычный для:

for (int i = 0; i < 2000000; i++) {
    var result = r.Next(1, 7) + r.Next(1, 7);
    ints[result] += 1;
}

Выход:

2: 2,7797
3: 5,58645
4: 8,3414
5: 11,09935
6: 13,8909
7: 16,6731
8: 13,82895
9: 11,10205
10: 8,3424
11: 5,5712
12: 2,7845

Последний результат - Треугольное Распределение, и это - ожидаемый результат.

Цель моего вопроса - не обсуждать применимость параллелизма. Вопрос в том, почему Parallel.For ведет себя так?

Ответы на вопрос(3)

Ваш ответ на вопрос