【发布时间】:2012-05-25 04:16:35
【问题描述】:
当我在 debug 模式下运行以下代码时,它将成功完成并退出。但是,如果我在 release 模式下运行以下代码,它会陷入无限循环并且永远不会完成。
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的访问? -
这是一些优化的原因。编译将构建一个真正的停止状态。
-
看看新的 CancellationToken 类。他们被发明来解决这个问题。 msdn.microsoft.com/en-us/library/dd997364.aspx
标签: c# .net multithreading