volatile关键字总结
2011-03-26 23:10
148 查看
在并行编程中,常常看到类似如下的声明
private volatile Int32 m_flag = 0;
声明中有一个volatile关键字。
这个关键字的作用是告诉编译器,请不要优化该变量。在Release模式下,编译器可能会对代码做一定程度的优化,比如它会把某个常用的变量存放到CPU寄存器中,(有时候,并不一定是编译器所做的优化,而是硬件直接支持这种方式),这样的目的是为了加快速度,提高性能。
在单线程环境下,这种优化很有效。但是在多线程环境下,可能会引发bug。
比如A线程,设置m_flag值的时候,是从CPU寄存器中直接读取并设置,而在内存中该值并未同步。而B线程此时正在从内存中获得该值,这样获得的值就不正确了。
因此,声明的时候用volatile表示,要求程序在内存中读写这个值,而不放到CPU寄存器中,避免发生bug。
本文出自 “一只博客” 博客,请务必保留此出处http://cnn237111.blog.51cto.com/2359144/527292
private volatile Int32 m_flag = 0;
声明中有一个volatile关键字。
这个关键字的作用是告诉编译器,请不要优化该变量。在Release模式下,编译器可能会对代码做一定程度的优化,比如它会把某个常用的变量存放到CPU寄存器中,(有时候,并不一定是编译器所做的优化,而是硬件直接支持这种方式),这样的目的是为了加快速度,提高性能。
在单线程环境下,这种优化很有效。但是在多线程环境下,可能会引发bug。
比如A线程,设置m_flag值的时候,是从CPU寄存器中直接读取并设置,而在内存中该值并未同步。而B线程此时正在从内存中获得该值,这样获得的值就不正确了。
因此,声明的时候用volatile表示,要求程序在内存中读写这个值,而不放到CPU寄存器中,避免发生bug。
本文出自 “一只博客” 博客,请务必保留此出处http://cnn237111.blog.51cto.com/2359144/527292
相关文章推荐
- Static、Extern、Volatile及Const关键字总结
- 关于java的volatile关键字吐血总结
- java并发编程synchronized、volatile关键字及ReentrantLock类总结
- 【转】关键字:auto、static、register、const、volatile 、extern 总结
- volatile关键字总结
- 关键字:auto、static、register、const、volatile 、extern 总结
- C++中volatile关键字及常见的误解总结
- volatile关键字使用总结
- Java volatile关键字总结
- 关键字:auto、static、register、const、volatile 、extern 总结
- Volatile关键字总结
- 并发编程总结之volatile关键字
- volatile关键字总结
- Java——多线程总结及ThreadLocal、Volatile、synchronized、Atomic四个关键字
- 关键字:auto、static、register、const、volatile 、extern 总结
- 关键字:auto、static、register、const、volatile 、extern 总结【转贴】
- 关键字:auto、static、register、const、volatile 、extern 总结
- volatile关键字学习总结
- java基础学习总结——volatile关键字解析
- C/C++ volatile关键字用法总结