Este programa ejecuta dos hilos diferentes y me dice quién es el ganador de la "carrera".Variante del algoritmo de Dekker confusión
Inesperadamente a veces AMBOS hilos "gana" (esperaba que alguien o nadie ganara). ¿Es este comportamiento esperado y por qué? Obviamente me falta algo fundamental aquí.
class Program
{
public volatile static int a = 0;
public volatile static int b = 0;
public static void Main()
{
for(int i = 0; i < 1000; i++)
{
a = 0;
b = 0;
Parallel.Invoke(delegate { a = 1; if (b == 0) Console.WriteLine("A wins"); },
delegate { b = 1; if (a == 0) Console.WriteLine("B wins"); });
Console.WriteLine(System.Environment.NewLine);
Thread.Sleep(500);
}
}
}
Resultados:
A wins
B wins
A wins
B wins
A wins
...
Al cambiar la implementación de 'Parallel' a' Old Thread's, parece funcionar. (No sé por qué todavía) –
@LB: Interesante, es probable que sea porque los hilos se ejecutan en el mismo procesador- ¿núcleo? –
configuración 'TaskCreationOptions.LongRunning' también parece hacer que funcione correctamente. –