确保从不同的读取线程看到写入

时间:2019-03-18 10:39:13

标签: c# multithreading thread-synchronization

提供以下课程:

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易变将解决此问题,但是还有其他方法可以解决此问题吗?

1 个答案:

答案 0 :(得分:0)