volatile关键字

引言

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

它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上Inter处理器是如何实现Volatile的,通过深入分析能帮助我们正确的使用Volatile变量。

Java中的Volatile的官方定义

Java语言规范第三版中对volatile的定义如下: java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁更加方便。如果一个字段被声明成volatile,java线程内存模型确保所有线程看到这个变量的值是一致的。

C语言中Volatile
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

为什么要使用Volatile

Volatile变量修饰符如果使用恰当的话,它比synchronized的使用和执行成本会更低,因为它不会引起线程上下文的切换和调度。

参考文章:

详解C中volatile关键字
聊聊并发(一)——深入分析Volatile的实现原理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • volatile 关键字解析 原文出处: 海子volatile 这个关键字可能很多朋友都听说过,或许也都用过。在 ...
    常青大侠阅读 615评论 0 4
  • Xcode技巧系列:http://www.jianshu.com/notebooks/7639304/latest...
    狂奔的胖蜗牛阅读 5,909评论 5 7
  • 郭相麟 生命拿得起的是责任 如同大树支撑着 向上的压力 生活放得下的是洒脱 如同人们行走保持着 晃晃悠悠的平衡 当...
    郭相麟阅读 170评论 0 0
  • 文/姜轶 刚才在朋友圈里看到了一位朋友的动态: 她给她的朋友发“下雨了”,她的朋友回她:“要打伞,照顾好自己。...
    姜轶阅读 277评论 0 0
  • 近日彩铅手绘教程,意外的惊喜的收到了很多,朋友的临摹作品,有的是小朋友的临摹,有的是小朋友的妈妈临摹,作品的质量特...
    工小设阅读 870评论 12 20