1.volatile的定义和实现原理
对一个volatile进行写操作时对应的汇编指令
lock addl $0x0,(%esp)
lock前缀的指令在多核处理器会引发两件事情
1.将当前处理器缓存行的数据写回到主内存
2.这个写回主内存的操作会使其他在cpu里缓存了该内存地址的数据无效
为了提高处理速度,处理器不直接和内存进行通信,而是将系统内存的数据读到局部内存后在进行操作,但是操作完并不知道什么时候回写到主内存。
如果对声明了volatile的变量进行写操作,jvm会向处理器发送一条lock前缀的指令,将这个变量所在的缓存的数据回写到主内存,同时为了保证其它处理器缓存一致,就会实现缓存一致性协议,每个处理器通过嗅探在总线上传播的数据来检查自己的缓存是否过期,当处理器发现在即缓存行所对应的内存被修改,将会将当前处理器的缓存设置成无效状态,当前处理器对这个数据进行操作的时候会重新从系统内存把数据读到处理器缓存中。
网友评论