【发布时间】:2017-02-05 17:49:27
【问题描述】:
让我们考虑一下这句话(Total Store Ordering):
读在读之前,写在写之前,读在写之前,但不是写在读之前。
我想我几乎掌握了基础知识:
- 每个线程都有自己的程序顺序(编写的代码)
- 一般来说,CPU 可能会重新排序指令,我们必须限制它以排除不正确的排序
- CPU 还可以重新排序内存加载和存储,我们也必须限制这些
- 当前的硬件实现具有“序列化指令”,例如
mfence,所有线程都会调用这些指令来解决这两个问题。 - 硬件通常只允许一个脏缓存,所以它就是刷新那个缓存:
- 存储线程刷新脏缓存
- 加载线程请求和阻塞直到没有脏缓存
- 内核开发人员关心的不是 CPU 访问内存的设备,但我不关心。
但我仍然无法理解“先读后读”的真正含义。这可能意味着这些架构中存在隐含的障碍和序列化指令,但我无法确定。
【问题讨论】:
-
可能读取不会相对于其他读取重新排序。
-
OP,请问您是从哪里得到这句话的?请注意,Sparc 和经典 x86 都不允许在此处进行加载加载重新排序 - en.wikipedia.org/wiki/Memory_ordering
标签: multithreading memory operating-system read-write memory-model