Cuando ejecuto el código siguiente en el modo de depuración , que va a terminar y salir con éxito. Sin embargo, si se me acaba el siguiente código en modo de liberación , que va a quedar atrapado en un bucle infinito y nunca termina.bucle infinito en modo de lanzamiento
static void Main(string[] args)
{
bool stop = false;
new Thread(() =>
{
Thread.Sleep(1000);
stop = true;
Console.WriteLine("Set \"stop\" to true.");
}).Start();
Console.WriteLine("Entering loop.");
while (!stop)
{
}
Console.WriteLine("Done.");
}
Qué optimización está causando el mismo quede atascado en un bucle infinito?
¿no hay necesidad de sincronizar el acceso a 'stop' entre los hilos? –
Eso es causado por algunas cosas de optimación. La compilación construirá un verdadero instat de parada. – rekire
Eche un vistazo a las nuevas clases CancellationToken. Fueron inventados para resolver este problema. http://msdn.microsoft.com/en-us/library/dd997364.aspx –