volatile的应用

       在并发编程中,volatile和synchronized都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量的时,另外一个线程能读取到这个修改的值。java

       Java编程语言容许线程访问共享变量,为了确保共享变量能被准确和一致性的更新,线程应该经过排它锁得到这个变量。若是一个字段被声明为volatile,java线程内存模型确保全部线程看到这个变量值是一致的。 编程

       在volatile变量修饰符的共享变量进行写操做的时候会多出,一些汇编代码,lock ...等,lock前缀的指令在多核处理器下会引起两件事:缓存

     1.回写内存。将当前处理器缓存行的数据写回到系统内存。并发

     2.缓存失效。这个写回内存的操做会使在其余CPU里缓存了该内存地址的数据无效。编程语言

       在多处理器下,为了保证各个处理器的缓存是一致的,就会实现缓存一致性协议,每一个处理器经过嗅探在总线上传播的数据来检查本身缓存的值是否是过时了,当处理器发现本身缓存行对应的内存地址被修改,就会将当前处理器的缓存行设置为无效。线程

volatile的两条实现规则:内存

1.Lock前缀指令会引发处理器缓存回写到内存。开发

2.一个处理器的缓存回写到内存会致使其余处理器的缓存无效。变量

相关文章
相关标签/搜索