niv*_*lam 19 .net c# multithreading
当我在调试模式下运行以下代码时,它将成功完成并退出.但是,如果我在发布模式下运行以下代码,它将陷入无限循环而永远不会完成.
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.");
}
Run Code Online (Sandbox Code Playgroud)
哪种优化导致它陷入无限循环?
Chr*_*ain 18
我的猜测是stop
主线程上变量的处理器缓存.在调试模式下,内存模型更严格,因为调试器需要能够在所有线程中提供变量状态的合理视图.
尝试创建一个字段并将其标记为volatile:
volatile bool stop = false;
static void Main(string[] args)
{
new Thread(() =>
{
Thread.Sleep(1000);
stop = true;
Console.WriteLine("Set \"stop\" to true.");
}).Start();
Console.WriteLine("Entering loop.");
while (!stop)
{
}
Console.WriteLine("Done.");
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1530 次 |
最近记录: |