根据《 Intel 64和IA-32体系结构软件开发人员手册》,LOCK信号前缀“可确保在声明信号时处理器拥有对任何共享内存的独占使用”。可以是总线或高速缓存锁的形式。

但是-这就是我问这个问题的原因-我不清楚,如果此前缀还提供了任何内存屏障。

我正在多处理器环境中使用NASM进行开发,并且需要使用可选的获取和/或发布语义来实现原子操作。

那么,我是否需要使用MFENCE,SFENCE和LFENCE指令,或者这将是多余的吗?

最佳答案

不,不需要使用与MFENCE, SFENCE and LFENCE前缀相关的LOCK指令。MFENCE, SFENCE and LFENCE指令可确保所有CPU内核中内存的可见性。在某些情况下,MOV指令不能与LOCK前缀一起使用,因此,要确保内存移动的结果对所有CPU内核可见,我们必须确保将CPU高速缓存刷新到RAM,并且必须使用fence指令。
编辑:有关Intel锁定原子操作的更多信息:

关于assembly - 英特尔64和IA-32 |原子操作,包括获取/释放语义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4813297/

10-11 18:25