在他的blog post中,Eric Lippert说:
我注意到在基于x86的硬件上,实际上从未观察到这种特定的写入重新排序;那些CPU不执行此优化。
这是否意味着x86 CPU在讨论波动性和读写重新排序时没有任何讨论的问题,或者他是否意味着只有在这个例子中CPU不会重新排序?
在x86_64 CPU中可能发生什么类型的重新排序以及在哪种情况下?
答案 0 :(得分:3)
这是否意味着x86 CPU在讨论波动性和读写重新排序时没有任何讨论的问题,或者他是否意味着只有在这个例子中CPU不会重新排序?
这意味着商店不会在x86 CPU中重新排列; 加载仍然可以向后移动。然后,了解x86的含义非常重要。在这篇文章的背景下,它只意味着x86而不是它的衍生物。与基本的x86实现相比,x86 oostore架构实现了更多的内存重新排序。您可以在此处获取所有详细信息: http://en.wikipedia.org/wiki/Memory_ordering
这个用例有很多例子,如下所示:
此外,重新排序不能跨越此体系结构上的方法调用边界。
除了重新排序之外,几乎任何CPU架构都可以缓存值,这是一种更加明显的优化。以下是此优化的一个很好的用例:
http://www.codeproject.com/Articles/389730/The-unsung-hero-Volatile-keyword-Csharp-threading