【问题标题】:What does "reads before reads" mean in memory ordering?内存排序中的“先读后读”是什么意思?
【发布时间】: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


【解决方案1】:

我很确定我在希腊大学的操作系统课程中听说过,该死的,我是用教授的声音读的。 :) 由于没有人回答,我会尝试回答。

想象你是操作系统,每个线程/程序都想执行读写操作。现在,由于我们讨论的是多线程,一个线程可能会读取另一个线程写入的内容,例如变量的值。

现在,如果线程 1 想要读取内存地址 x,而线程 2 也想要执行读取 x,则可以允许它们以任意顺序读取 x。我想就是这个意思!

希望它以某种方式有所帮助,因为我知道这不是最好的答案! :/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-26
    • 2017-09-10
    • 2021-10-04
    • 1970-01-01
    • 2013-07-09
    • 2020-12-22
    • 2018-10-22
    • 1970-01-01
    相关资源
    最近更新 更多