Когда я запустил следующий код в debug режиме, он успешно завершит и выйдет. Однако, если я запустил следующий код в релиз, он застрянет в бесконечном цикле и никогда не закончится.Бесконечная петля в режиме освобождения
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.");
}
Какая оптимизация заставляет застревать в бесконечном цикле?
Не нужно ли синхронизировать доступ к «остановке» между потоками? –
Это вызывает некоторые вещи оптимизации. Компиляция создаст истинную установку остановки. – rekire
Взгляните на новые классы CancellationToken. Они были изобретены для решения этой проблемы. http://msdn.microsoft.com/en-us/library/dd997364.aspx –