當我在調試模式下運行以下代碼時,它將成功完成並退出。但是,如果我在版本模式下運行以下代碼,它將陷入無限循環並永不完成。釋放模式下的無限循環
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.");
}
哪種優化會導致它陷入無限循環?
是否不需要在線程之間同步對「stop」的訪問? –
這是由一些optimation的東西造成的。編譯將建立一個真正的停止狀態。 – rekire
看看新的CancellationToken類。他們被髮明來解決這個問題。 http://msdn.microsoft.com/en-us/library/dd997364.aspx –