Memory barrier


#21

没有只让回复三次吧? 我怎么不知道有这个限制的


#22

我没有在论坛里设置限制.

LOCK 是用来保证指令原子性的. x86 的指令每条都是原子的, 然而进入多核后就不是那么回事了. 所以在特意需要原子性的地方要加 lock 前缀, 你不要去管 cpu 怎么实现的, 反正加了他就是原子了.

和 mb 不是一个意思, 你不要混淆. 尽管隐含的操作里有和 mb 一样的行为.


#23

lfence sfence mfence 也不算了,对吧。反正按照你的逻辑,x86是没有mb指令的,就算是都不算是。

你是cai博士,你会不知道我想表达啥?还是在装糊涂啊。4小时不能发了。回复楼下的。本句

还有2小时才能回复。==============继续用本楼

而 x86 是在硬件上自动保证的。没有专门的 mb 指令。。。。

=====================

lfence sfence mfence 不算专门的mb指令?因为它只是阻断CPU 乱序的行为而已,所以不是mb指令,何为mb?是一定明确在手册写清楚这个是 刷cache pile line的才算mb指令?


#24

你到底想表达啥意思? 真看不出来. 你的意思是 x86 也是要 mb 的? 可我没说不需要啊! 我一直在强调 mb 是必要的.

那你的意思是, x86 不要 mb ? 我糊涂了.

你可能思维和常人不同. 我解释 “x86有隐式mb所以你之前没写mb的代码侥幸没出问题” 你理解成了 "x86有隐式mb所以不需要 mb "

如果你不是这样理解, 为啥搅和半天呢?


#25

其实讨论这么多,还不如举个实例。 写个函数dump一份汇编,gcc下用-fschedule-insns优化就知道mb的重要性了。 当然理论也很重要,只是说明问题的时候带个实例就不那么容易让人产生误会了。