yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
阅读:2417回复:2

哪位好心人解释一下mb() 函数的意思吧?

楼主#
更多 发布于:2009-01-13 23:01
我在/linux/include/asm-x86/system.h中看到这段代码:

291
292 /*
293  * Force strict CPU ordering.
294  * And yes, this is required on UP too when we're talking
295  * to devices.
296  */
297 #ifdef CONFIG_X86_32
311 #define mb() alternative("lock; addl $0,0(%%esp)", "mfence", X86_FEATURE_XMM2)
312 #define rmb() alternative("lock; addl $0,0(%%esp)", "lfence", X86_FEATURE_XMM2)
313 #define wmb() alternative("lock; addl $0,0(%%esp)", "sfence", X86_FEATURE_XMM)
314 #else
315 #define mb()    asm volatile("mfence":::"memory")
316 #define rmb()   asm volatile("lfence":::"memory")
317 #define wmb()   asm volatile("sfence" ::: "memory")
318 #endif
319


我想请问,alternative是不是说如果没有mfence指令就用lock; addl $0,0(%%esp)来代替?
yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-03-20 09:36
memory barrier?
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
板凳#
发布于:2009-03-20 19:54
mb内存栅,作为一种数据同步的手段
走走看看开源好 Solaris vs Linux
游客

返回顶部