首页 > 解决方案 > cpu如何使用'mfence'来保护顺序一致性?

问题描述

我想知道cpu如何使用'mfence'来保护顺序一致性,谁能告诉我?

标签: c++11x86cpuatomic

解决方案


为了对齐加载和存储的顺序一致性,在 x86 上使用指令跟随每个存储就足够了。mfence但是,这不是必需的:更激进的方法只需要确保一条mfence指令出现在每对可能的存储和后续加载指令之间。例如,一系列未被加载中断的存储指令mfence除了在最终存储之后不需要任何指令。

如果您想以原子方式执行复合操作(例如递增值),您需要的不仅仅是mfence- 您需要锁定指令,例如lock inc. 这也意味着与 相同的障碍mfence,因此在这种情况下不需要额外的障碍。

在实践中,mfence即使是普通存储目的,也可能不是强制执行顺序一致性的理想选择,因为它的性能似乎比锁定操作差,因此lock xchg可以使用例如代替它。


推荐阅读