我已经取得了一个可行的例子!
主要思想来自Wiki,但C#有所更改。Wiki文章针对C ++的静态字段演示了这一点,似乎C#总是仔细地将请求编译为静态字段…而我以非静态示例为例:
如果您在 模式下并且 (即使用Ctrl + F5)运行此示例,则该行将while (test.foo != 255)
被优化为“ while(true)”,并且该程序永不返回。但是添加volatile
关键字后,您始终会获得“确定”。
class Test
{
/*volatile*/ int foo;
static void Main()
{
var test = new test();
new Thread(delegate() { Thread.Sleep(500); test.foo = 255; }).Start();
while (test.foo != 255) ;
Console.WriteLine("OK");
}
}