提供以下课程:
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
易变将解决此问题,但是还有其他方法可以解决此问题吗?
答案 0 :(得分:0)