2012-03-21 32 views
-1

说我在这样的循环检查的变量。用这种用法挥发很好吗?

while(var) 
    ; 

这里,VAR必须声明volatile如果程序是多线程和VAR被多个线程访问。这是一个已知的事实。但是,让我们说,我们有这样的东西。

while(var + 1) 
    ; 

请问这仍然适用于volatile?我的意思是有可能,编译器缓存(VAR + 1)价值?换句话说,我问,如果我们需要像下面的代码这一点,与临时是一个也volatile变量,以确保没有缓存由编译器完成。

while(temp) 
    temp = var + 1; 

回答

3

从编译器的角度来看它是一样的。一个volatile变量必须从内存中时,它的访问重新读取。评估varvar + 1都涉及访问var,因而它们必须包括读取回来。没有区别。

5

也许我补充一点,检查这样使用volatile为您守护线程一个变种是根本不足以防止各种以及各种比赛情况的发生。如果您处于线程环境中,请使用适当的锁,原子和/或互斥体结构来抓取和操纵您的变量。

相关问题