java并发之volatile
2016-08-10 14:04
169 查看
volatile是轻量级的synchronized,它在多处理器应用开发中保证了共享变量的“可见性”(可见性指当一个线程修改共享变量后,其它线程可以看到这个修改)。
volatile如果使用合理会比synchronized开销更小,因为volatile不会引起上下文的切换和调度。
在x86处理器上,被volatile修饰的变量进行写操作时生成的汇编代码会被Lock指令修饰,Lock前缀的指令在多核处理器下会引发两件事情:
a.将当前处理器缓存行的数据写回到系统内存。
b.这个写回内存的操作会使在其他cpu里缓存了该内存地址的数据无效(缓存一致性协议,缓存通过嗅探总线上传播的数据来检查自己缓存的值是不是已经过期了)。
volatile的两条实现原则:
1)Lock前缀指令会引起处理器缓存回写到内存。
2)一个处理器的缓存回写到内存会导致其它处理器的缓存无效。
volatile如果使用合理会比synchronized开销更小,因为volatile不会引起上下文的切换和调度。
在x86处理器上,被volatile修饰的变量进行写操作时生成的汇编代码会被Lock指令修饰,Lock前缀的指令在多核处理器下会引发两件事情:
a.将当前处理器缓存行的数据写回到系统内存。
b.这个写回内存的操作会使在其他cpu里缓存了该内存地址的数据无效(缓存一致性协议,缓存通过嗅探总线上传播的数据来检查自己缓存的值是不是已经过期了)。
volatile的两条实现原则:
1)Lock前缀指令会引起处理器缓存回写到内存。
2)一个处理器的缓存回写到内存会导致其它处理器的缓存无效。
相关文章推荐
- 【Java并发编程】之五:volatile变量修饰符—意料之外的问题(含代码)
- java 并发编程学习笔记之volatile意外问题的正确分析解答
- 【Java并发编程】之十八:第五篇中volatile意外问题的正确分析解答(含代码)
- Java并发之原子变量和原子引用与volatile
- Java并发编程:volatile关键字解析
- java并发编程实践 volatile
- Java并发编程:volatile关键字解析
- Java并发编程:volatile关键字解析
- java并发J.U.C AtomicReference VS Volatile
- java并发编程 -volatile关键字
- 【Java并发编程】之五:volatile变量修饰符—意料之外的问题(含代码)
- Java并发中正确使用volatile【转】
- 【Java并发编程】之十八:第五篇中volatile意外问题的正确分析解答(含代码)
- 【Java并发编程】之五:volatile变量修饰符—意料之外的问题(含代码)
- Java并发编程:volatile关键字解析
- 【Java并发编程】之十八:第五篇中volatile意外问题的正确分析解答(含代码)
- java并发--原子性和volatile(可变性)
- 【转】Java并发中正确使用volatile
- Java并发编程:volatile关键字解析
- Java并发编程:volatile关键字解析