鉴于以下课程:
class C
{
public int x = 0;
public void F() {
new Thread(G).Start();
while (x == 0) { Thread.Sleep(TimeSpan.FromMilliseconds(1)); }
}
public void G() {
Thread.Sleep(TimeSpan.FromMilliseconds(1000));
Interlocked.Exchange(ref x, 1);
}
}
我认为C#
的new C().F()
标准允许永远运行是的,因为没有什么可以迫使F()
从每次访问的主内存中检索x
的值。 Interlocked.Exchange
在这里甚至没有帮助,因为F()
没有看到G()
的实现,所以可能优化远离主存储器的访问。
这个分析是否正确?
此外,我知道让x
volatile会解决这个问题,但还有什么能够解决这个问题吗?