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都不允许在此处进行加载重新排序-