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

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

Сообщение Anonymous »

Недавно я проверял метод c# parallel.for в отношении гоночных условий и обмена проблемами состояния. Чтобы проверить этот цикл, я внедрил простое приложение C# консоли, которое всегда должно возвращать одно и то же значение (см. Спрей кода ниже). Тем не менее, в случае выполнения, он возвращает разные значения. < /P>
Кто -нибудь знает причину этого? < /P>
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;

foreach (var rep in repetitions)
{
foreach(var rep2 in repetitions)
{
if ( !rep.All(r => rep2.Contains(r)) ||
!rep2.All(r => rep.Contains(r))
)
{
Console.WriteLine("Routine not consistent");

Console.WriteLine("rep");
rep.ForEach(x => Console.Write(x));

Console.WriteLine("\nrep2");
rep2.ForEach(x => Console.Write(x));

shouldBreak = true;
break;
}
}

if ( shouldBreak )
{
break;
}
}

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

Action agregate = (value) =>
{
if (!result.Contains(value))
{
result.Add(value);
}
};

Func inicializador = () => 0;

Func body = (i, state, threadAcum) =>
{
if (i % 2 == 0)
{
threadAcum += i;
}

return threadAcum;
};

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#»