Почему параллель. [дублировать]C#

Место общения программистов C#
Ответить
Anonymous
 Почему параллель. [дублировать]

Сообщение Anonymous »

Недавно я проверял метод c# parallel.for в отношении гоночных условий и обмена проблемами состояния. Чтобы проверить этот цикл, я внедрил простое приложение C# консоли, которое всегда должно возвращать одно и то же значение (см. Спрей кода ниже). Тем не менее, в случае выполнения, он возвращает разные значения, специфически размеры массивов различаются, указывая на то, что мой диапазон был разделен по -разному между различными прогонами для .
Кто -нибудь знает причину параллели .For Диапазон разделения по -разному между «потоками», даже если нет изменения значений между прогонами?
using System.Collections.Concurrent;
var Ntests = 1000;
var repetitions = Enumerable.Range(0, Ntests).Select((rep) =>
{
var result = NewMethod(0,10);

return result;

}).ToArray();

bool shouldBreak = false;

for (int first = 0; !shouldBreak && first < repetitions.Length; first++)
{
for (int second = first+1; !shouldBreak && second < repetitions.Length; second++)
{
var rep = repetitions[first];
var rep2 = repetitions[second];
if (!Enumerable.SequenceEqual(rep.OrderBy(x=>x), rep2.OrderBy(x=>x)))
{
Console.WriteLine("Routine not consistent");

Console.WriteLine($"rep[{first}]:{string.Join(',', rep)}");
Console.WriteLine($"rep[{second}]:{string.Join(',', rep2)}");

shouldBreak = true;
}
}
}

static List NewMethod(int init, int final)
{
var result = new ConcurrentBag();

Action agregate = (value) => result.Add(value);

Func inicializador = () => 0;

Func body =
(i, state, threadAcum) => threadAcum += i;

Parallel.For(init,
final,
inicializador,
body,
agregate);

return result.ToList();
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... tions-of-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»