2011-11-14 35 views

回答

4

如果您正在使用pthreads,则不需要 - volatile对于正确的同步既不必要也不足够。如果你对全局变量的访问被一个互斥体(或另一个同步原语)正确保护,那么你可以简单地将它们声明为普通变量。

0

有时候最好将数据声明为volatile(大多数情况下是原子操作并且由原子操作操作)。但使用同步机制(如互斥锁,rwlocks等)来序列化对全局数据的访问是非常重要的。使用volatile的真正原因很少见:当变量是例如一个整数,当你使用特殊的原子操作时。

您需要使用同步原语,例如,的缓存

-1

易失性只是告诉编译器,而不是变量可以从外部的东西修改,所以它不应该做任何优化(跳过读/写,放入寄存器)。所以你应该总是声明一个全局变量volatile,如果多线程要使用它。

0

我看到有人说当你使用pthreads时没有必要这么做。 我不知道pthread如何保护这种情况,但据我所知, 定义一个全局变量为“volatile”,如果你在多线程环境中, 原因就像myrkos上面所说的,多线程环境是变量可以“外部”修改的情况。现代编译做了比你想象的更多的优化,如果它认为变量没有被修改, 会使代码不从内存读取值,但是在这样的env中变量可能会改变。

但是,使全局变量运行良好还不够,您需要使用自动操作或 互斥锁来保护它。

相关问题