gpt4 book ai didi

c++ - volatile 关键字和 RAII 习语 (C++)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:59 27 4
gpt4 key购买 nike

假设有一个类来控制对与此类似的(关键)代码块的并发访问:

class RAIIObj : public boost::noncopyable {
public:
explicit RAIIObj( LockObj& Obj ) : LkObj( Obj ) { Obj.Acquire(); }
~RAIIObj() { try { Obj.Release(); } catch (...) {} }
private:
LockObj& LkObj;
};

使用这样一段代码时,是否需要使用volatile关键字不想看到代码被优化掉?

例如,我是否必须写

ALockingObj LockObj;

void AFunc() {
RAIIObj LKGuard( LockObj );

// do some MT stuff
}

ALockingObj LockObj;

void AFunc() {
volatile RAIIObj LKGuard( LockObj );

// do some MT stuff
}

为了确保LKGuard一直存在?

因为 LKGuard 是一个局部变量,在主体的任何位置都不会使用如果我不使用 volatile 关键字,该函数是否可以优化掉?

谢谢

最佳答案

不,你不需要声明它是可变的。编译器可以看到实例化 lkobj 会做一大堆无法优化的事情(与 int lkobj; 相比,后者显然什么都不做)

关于c++ - volatile 关键字和 RAII 习语 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28288101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com