Swi*_*tch 8 c++ multithreading volatile
鉴于以下课程:
class MyClass {
public:
int value() const {
return value_;
}
private:
volatile int value_;
};
Run Code Online (Sandbox Code Playgroud)
是否还必须将value()成员函数标记为volatile以避免被优化掉或者写得好吗?谢谢.
它完全类似于const工作原理.
如果您有一个const对象,则只有标记的成员函数const是可调用的.
所以...
如果您有一个volatile对象,则只有标记的成员函数volatile是可调用的.
只要对象本身不是volatile,函数是否正常就没有区别.
但是,请记住,volatile有没有做多线程,它会不会帮你写线程安全的代码.对于任何与并发相关的东西,它都是错误的工具.
value() 成员函数是否也必须标记为易失性以避免被优化,或者是否可以按照编写的那样?
将成员函数标记为 volatile 对于它是否被优化掉没有影响。正如所写的那样。
担心的是我是否有 MyClass c; 然后调用c.value(); 有几次,编译器可能认为 c.value() 将返回相同的值(即使它可能已经改变......)
听起来你想要的是了解原子变量。看一下 std::atomic。
如果你真的想了解 volatile,请阅读这篇论文:http://www.cs.utah.edu/~regehr/papers/emsoft08-preprint.pdf