Multithreading 什么是;“先读后读”;是指内存排序? 让我们来考虑这个句子():< /P>

Multithreading 什么是;“先读后读”;是指内存排序? 让我们来考虑这个句子():< /P>,multithreading,memory,operating-system,read-write,memory-model,Multithreading,Memory,Operating System,Read Write,Memory Model,读在读之前,写在写之前,读在写之前,但不在读之前写 我想我已经基本掌握了: 每个线程都有自己的程序顺序(编写时的代码) 一般来说,CPU可能会对指令进行重新排序,我们必须对其进行约束以排除错误的排序 CPU还可以重新排序内存加载和存储,我们也必须约束它们 当前的硬件实现有“序列化指令”,如mfence,所有线程都会调用这些指令来解决这两个问题 硬件通常只允许一个脏缓存,所以这一切都与刷新该缓存有关: 存储线程刷新脏缓存 加载线程请求和块,直到没有脏缓存 内核开发人员关心CPU访问内存以外的

读在读之前,写在写之前,读在写之前,但不在读之前写

我想我已经基本掌握了:

  • 每个线程都有自己的程序顺序(编写时的代码)
  • 一般来说,CPU可能会对指令进行重新排序,我们必须对其进行约束以排除错误的排序
  • CPU还可以重新排序内存加载和存储,我们也必须约束它们
  • 当前的硬件实现有“序列化指令”,如
    mfence
    ,所有线程都会调用这些指令来解决这两个问题
  • 硬件通常只允许一个脏缓存,所以这一切都与刷新该缓存有关:
    • 存储线程刷新脏缓存
    • 加载线程请求和块,直到没有脏缓存
  • 内核开发人员关心CPU访问内存以外的设备,但我不关心

然而,我仍然不明白“先读后读”到底意味着什么。这可能意味着这些体系结构中存在隐含的障碍和串行化指令,但我真的说不出来。

我确信我在希腊大学的操作系统课程中听到过,该死,我是用教授的声音读的:)既然没有人回答,我会尝试回答

假设您是操作系统,每个线程/程序都希望执行读写操作。现在,由于我们讨论的是多线程,一个线程可能会读取另一个线程编写的内容,比如变量的值

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


希望能有所帮助,因为我知道这不是最好的答案/

可能读到的内容不会相对于其他读到的内容重新排序。请允许我问一下,您是从哪里获得此引用的?请注意,Sparc和classic x86都不允许在此处进行加载重新排序-