【发布时间】:2010-11-18 13:29:53
【问题描述】:
我有一些问题想澄清一下。
易失性阅读确保您阅读 变量的最新值。可以 意味着它强制所有CPU 为此刷新他们的缓存值 多变的?只有那个变量还是全部? 因此,如果它会强制所有 CPU 刷新缓存的写入并获取最新的 来自主内存的版本,这是一个 内存屏障?
Volatile write 确保你写了一个 主变量的值 记忆。是否意味着它无效 所有的缓存值 所有 CPU 中的变量?
您是否在使用内存屏障时 你用的是 volatile 关键字吗?
Interlocked 执行 以原子方式读取/修改/写入 手术。互锁是否确保 例如,你是 递增 a 的最新版本 变量,其他 CPU 将看到 这个变化?我认为是因为它是 应该使用内存屏障, 但我不确定。那么我们可以说 那个 Interlocked 正在做一个 VolatileRead/修改/VolatileWrite 原子的?
当您使用内存屏障时,是否 它影响到所有变量 CPUS,还是只是周围的?
锁定是昂贵的,因为它 导致两个内存屏障和一个 “上下文切换”如果线程有 等待,但那是什么 互锁的优势?只为了 避免“上下文切换”?
处理的是什么 ReaderWriterLockSlim 和 递归?我没看懂 有什么问题。
如你所见,我现在脑子里一片混乱。
提前致谢。
【问题讨论】:
-
这些都是很好的问题,但应该作为单独的帖子提出。我建议删除此帖子并将其拆分为几个较小的帖子。
-
我想我应该详细说明原因: 1. 长帖子不鼓励读者完成(因此您消除了潜在的回答者)。 2. 迁移者知道其中一个问题的答案,但不是全部,并且认为他们不应该发布不完整的答案(因此您消除了更多的回答者)。 3. 有很多问题的长问题需要很长时间才能回答(所以你会阻止更多的回答者)。如果你打破这篇文章,你会得到更好和更多的回应。
-
抱歉上面有错别字;将“迁移知道答案”替换为“可能知道答案”。
-
是的,你说得有道理。我正要这么做,但正如布赖恩温柔地回答的那样……我会离开的。下次我会记住你的建议。谢谢。
标签: .net multithreading