您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: