两个线程(主线程和另一个称为 T 的线程)可以访问相同的布尔字段。T 什么都不做,并且 Main在 2 秒后将while (_bool) { }
false 分配给。_bool
在调试时,T 退出循环。
在发布时,T 永远不会退出循环。
为什么?
编辑:
而且,为什么要volatile
解决_bool
这个问题?
using System;
using System.Threading;
namespace ConsoleApplication1
{
internal class Program
{
private bool _bool = true;
private static void Main()
{
var program = new Program();
var t = new Thread(SomeThread);
t.Start(program);
Thread.Sleep(2000);
program._bool = false;
Console.WriteLine(program._bool);
}
private static void SomeThread(object obj)
{
var p = obj as Program;
Console.WriteLine("Entered loop");
while (p._bool)
{
}
Console.WriteLine("Exited Loop");
}
}
}