volatile 的学习要点
来源:互联网 发布:c 编程 猜字小游戏 编辑:程序博客网 时间:2024/05/22 06:30
第一个重点:要了解,多线程之间的通信机制有两种,共享内存和消息传递。另外除了主存之外,每一个线程都有一个私有的本地内存空间(Local memory)。本地内存中存储了该线程以读/写共享变量的副本。其实本地内存是JMM的一个抽象概念,并不真实存在,它涵盖了缓存,写缓存区,寄存器以及其他的硬件和编译器的优化。
第二个重点:重排序的问题。
在执行程序的时候,为了提高性能,编译器和处理器常常会对指令做重排序,重排序分为3种。
1:编译器优化的重排序。
2:指令集并行重排序。
3:内存系统的重排序。
最后,对volatile进行介绍,它具有以下特性。
1)可见性。对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。
2)原子性。对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性。
3)根据之前所说的通信机制,volatile是通过清除第二个线程中已有的本地内存中的变量信息为无效,使得线程B不得不去主线程去获取共享变量以得完成变量的可见性。
4)volatile修饰的变量的读、写都会在每一次读写前会加入屏障,来禁止程序的重新排序。
0 0
- volatile 的学习要点
- Volatile关键字的学习
- java的学习要点
- 学习Java的要点
- Java的学习要点!
- C++ 的学习要点!
- ActionBar的学习要点!
- 关于学习的学习要点
- Java语言学习的要点
- autocad的几个学习要点
- 入门学习duilib的要点
- verilog HDL 学习的要点
- java的一些学习要点!
- volatile学习
- 学习要点
- 学习要点
- C学习——volatile的用法
- C++学习笔记:volatile的作用
- 菜单栏
- maven 私服搭建nexus 3.0.1,安装,使用
- 关于截取字符串substr和substring两者的区别
- SpringMVC使用注解方式配置IOC
- 账户类 Account
- volatile 的学习要点
- 一句话理解PCI9052的LAS0RR
- 消息队列
- 题目2 括号配对问题
- sitemesh学习
- Vertx_web导出excel文档
- CGContextTranslateCTM,CGContextScaleCTM,CGContextRotateCTM详解
- HTML5获取地理经纬度并通过百度接口得到实时位置
- OC学习日记05-封装、继承和多态