Performance x86锁与SFENCE/MFENCE
x86Performance x86锁与SFENCE/MFENCE,performance,assembly,optimization,x86,intel,Performance,Assembly,Optimization,X86,Intel,x86LOCK指令允许内核锁定系统总线,因此它可以专门修改内存(或者允许缓存一致性协议实现相同的功能)。但是,《英特尔开发人员手册》3A并未说明锁定刷新存储缓冲区 相反,SFENCE和MFENCE阻止重新排序和刷新存储缓冲区 那么什么时候需要使用LOCK和SFENCE/MFENCE LOCK是否与单个指令的原子性有关,而SFENCE/MFENCE是否与一系列指令有关?SFENCE只对常规存储排序NT存储,并且只最终刷新存储缓冲区,但不能在以后的加载可以执行之前。IDK为什么你会在这篇文章中提到它
LOCK
指令允许内核锁定系统总线,因此它可以专门修改内存(或者允许缓存一致性协议实现相同的功能)。但是,《英特尔开发人员手册》3A并未说明锁定
刷新存储缓冲区
相反,SFENCE
和MFENCE
阻止重新排序和刷新存储缓冲区
那么什么时候需要使用LOCK
和SFENCE
/MFENCE
LOCK
是否与单个指令的原子性有关,而SFENCE
/MFENCE
是否与一系列指令有关?SFENCE只对常规存储排序NT存储,并且只最终刷新存储缓冲区,但不能在以后的加载可以执行之前。IDK为什么你会在这篇文章中提到它,除了AMD CPU上(我认为)它的语义更像MFENCE。lock
ed指令和MFENCE
之间唯一可能的区别是它们是顺序NT存储(是)还是顺序弱的NT加载(在某些情况下,对于锁定,否)因此,一般来说,只有当你需要一个完整的屏障作为一些还不是原子RMW的东西的一部分时,你才使用mfence。如果你在做一个商店,那么使用xchg
而不是mov+mfence
会更有效。当然,即使使用一个虚拟的lock add qword[rsp],0
而不是mfence。@PeterCordes考虑到内存屏障的强大,我只是不确定lock指令的意义是什么。哦,lock
提供了原子RMW,同时也是一个完整的屏障。