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

标签 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 变易变会解决这个问题,但是还有什么其他方法可以解决这个问题吗?

最佳答案

关于c# - 确保从不同的读取线程看到写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55219407/

相关文章:

ruby - 在 Ruby 中实现同步屏障

c# - 如何重写 Regex.Replace(由于异步 api)

c# - 如何处理大量文件

java - 如果我只想要一种在线程之间发出信号的方法,为什么我在哪个对象上使用 wait()/notify() 很重要?

c - c语言在多线程应用中clock()是如何计时的?

c# - ConfigureAwait(false) 性能测试

algorithm - PRAM 模型中 CRCW 和 EREW 的主要区别是什么?

c# - 解析 JSON 而不抛出错误异常?

c# - < Material xmlns ='x' > 不是预期的

c# - 转换 XML 时路径异常中的非法字符