我知道,内存障碍阻止了指令从前到后以及从后到后的重新排序,例如,如果我有以下说明:
instruction 1
instruction 2
instruction 3
memory barrier
instruction 4
instruction 5
instruction 6这些指令可以按以下顺序执行:
instruction 3
instruction 1
instruction 2
memory barrier
instruction 6
instruction 5
instruction 4但它们永远不会按以下顺序执行:
instruction 1
instruction 2
instruction 5
memory barrier
instruction 4
instruction 3
instruction 6但是,我不确定以下任务是否也是由内存屏障执行的:
注意:我指的是x86体系结构。
发布于 2018-05-11 16:36:55
确定的来源是英特尔优化参考手册。请看第7章中的各种栅栏说明,以及第9章中关于多线程的讨论。
从第7章:“MFENCE (内存栅栏)指令使得在MFENCE之前的每个加载/存储指令按照程序顺序在MFENCE之后的任何加载/存储之前全局可见。”
关于这一点有一个有趣的关于y-组合子的讨论。对我来说,最有趣的评论是由并发数据结构库(并发工具包)的(推定)作者写的:“根据我的经验,在x86上使用mfence没有任何与并发相关的原因。实际上,您将看到我们有检查x86oids并使用原子RMW而不是非原子存储/RMW+fence的代码。”这就引出了一个问题,你什么时候需要篱笆指示?我认为这主要是为了简化代码。
https://softwareengineering.stackexchange.com/questions/370736
复制相似问题