有volatile关键字修饰的变量在进行写操作时,汇编代码会多一行:
【lock addl $0x0,(%esp);】,这行代码的含义是对原值加零,其中相加指令addl前有lock修饰。通过IA-32架构软件开发者手册可知,lock前缀的指令在多核处理器的时候会将当前处理器缓存行的数据写回系统内存,而这个写回内存的操作会使在其他CPU里缓存了该内存地址的数据无效,当处理器要对这个数据进行修改操作的时候,会强制重新从系统内存里把数据读到处理器缓存里。
volatile底层实现原理
最新推荐文章于 2021-12-24 14:40:14 发布