美文网首页
记一次volatile实现

记一次volatile实现

作者: 世外小虫 | 来源:发表于2018-04-16 22:59 被阅读0次

    对于volatile关键字,如果一个变量被它修饰,在生成汇编语言,大概会有个             0x01a3de24:lock addl $0x0,(%esp)      ;...f0830424 00

    这个操作相当于是一个内存屏障,只有一个cpu访问内存时,并不需要内存屏障;但是如果有两个或者更多cpu访问同一块内存时,且其中一个在观测另外一个,就需要内存屏障来保证一致性了。这句中的:addl $0×0,(%esp) 指令(把esp寄存器里的值加0)显然是一个空操作,关键在于lock前缀,查询IA32 手册,它的作用是是的本cpu的cache 写入了内存,该写入动作也会引起别的cpu或者别的内核无效化其cache,这种操作相当于对cache中的变量做了次“store”和“write”操作所以通过这样一个空操作,可以让前面的volatile变量的修改对其他cpu立即可见;

    相关文章

      网友评论

          本文标题:记一次volatile实现

          本文链接:https://www.haomeiwen.com/subject/nhyykftx.html