volitale关键字
2016-05-14 16:40
183 查看
volitale关键字是用了防止编译器优化代码的,volitale限定的变量都被指定从内存中读取.
当编译期间编译器访问这段代码时,首先把a和v从内存中读到寄存器中,然后把5*v的值赋给a,在把a读回内存中。同样先把b的值从内存中读到寄存器里,因为在同一个上下文中编译器发现b和a的值相同,因此直接从寄存器读取a的值赋给b,而不会重新计算5*v。倘若在执行b=5*v语句之前,有另一个线程调用修改了v的值,会产生数据不一致的情况。
为了避免上述情况的发生,可以使用volitale关键字修饰变量v.
int v=10; void func() { int a,b; a=5*v ; b=5*v ; .... }
当编译期间编译器访问这段代码时,首先把a和v从内存中读到寄存器中,然后把5*v的值赋给a,在把a读回内存中。同样先把b的值从内存中读到寄存器里,因为在同一个上下文中编译器发现b和a的值相同,因此直接从寄存器读取a的值赋给b,而不会重新计算5*v。倘若在执行b=5*v语句之前,有另一个线程调用修改了v的值,会产生数据不一致的情况。
为了避免上述情况的发生,可以使用volitale关键字修饰变量v.
相关文章推荐
- Java 泛型
- 排序算法
- utf-8加密用于汉字加密(避免乱码)
- XML解析方式和调整jvm大小
- python爬取51job中hr的邮箱
- NYOJ 745 蚂蚁的难题(二)
- snap软件包在带有X11的Ubuntu中并不安全
- 结合一道面试题 看c语言运算符的执行顺序
- 在hibernate3中如何利用HQL语句查询出对象中的部分数据并且返回该对象?
- 神经网络编程入门
- 亡命逃窜 nyoj 523
- 作业八 单元测试
- Android中的Canvas
- ExpandableListView
- Problem C: Mine Sweeping Game (华中农业预赛)
- js图片转base64编码压缩上传
- 虚拟地址,虚拟地址空间, 交换分区
- 系统参数的设计,通用方法提取,页面处理map字符串并显示系统参数(增强版)
- 线程
- Android中操作数据的集中方式---文件,SQLite,ContentProvider