volatile的应用

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

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

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

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

     2.这个写回内存的操作会使在其他CPU里缓存了该内存地址的数据无效。

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

    volatile的两条实现规则:

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

2.一个处理器的缓存回写到内存会导致其他处理器的缓存无效。

       

猜你喜欢

转载自my.oschina.net/u/3126880/blog/1822013