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

问题描述 投票:2回答:1

鉴于以下课程:

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会解决这个问题,但还有什么能够解决这个问题吗?

c# multithreading thread-synchronization
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.