假设有一个类来控制与这个类似的(关键)代码块的并发访问:
class RAIIObj : public boost::noncopyable {
public:
explicit RAIIObj( LockObj& Obj ) : LkObj( Obj ) { Obj.Acquire(); }
~RAIIObj() { try { Obj.Release(); } catch (...) {} }
private:
LockObj& LkObj;
};
Run Code Online (Sandbox Code Playgroud)
使用这样的代码时,我是否需要使用volatile关键字才能看到代码被优化掉?
例如,我必须写
ALockingObj LockObj;
void AFunc() {
RAIIObj LKGuard( LockObj );
// do some MT stuff
}
Run Code Online (Sandbox Code Playgroud)
要么
ALockingObj LockObj;
void AFunc() {
volatile RAIIObj LKGuard( LockObj );
// do some MT stuff
}
Run Code Online (Sandbox Code Playgroud)
为了确保LKGuard始终存在?
由于LKGuard是一个局部变量,在函数体的任何一点都没有使用,如果我不使用volatile关键字,可以优化掉吗?
谢谢