이 하나휘발성 키워드 RAII 관용구 (C++)와 유사한 (중요한) 코드 블록에 대한 동시 액세스를 제어하는 클래스를 가지고 가정
class RAIIObj : public boost::noncopyable {
public:
explicit RAIIObj(LockObj& Obj) : LkObj(Obj) { Obj.Acquire(); }
~RAIIObj() { try { Obj.Release(); } catch (...) {} }
private:
LockObj& LkObj;
};
코드와 같은 조각을 사용하여 수행 내가 필요 에 휘발성 키워드를 사용하면 최적화 된 코드가 보이지 않습니까?
예를 들어, 나는 LKGuard 항상 존재하는지 확인하기 위해
ALockingObj LockObj;
void AFunc() {
RAIIObj LKGuard(LockObj);
// do some MT stuff
}
또는
ALockingObj LockObj;
void AFunc() {
volatile RAIIObj LKGuard(LockObj);
// do some MT stuff
}
를 작성해야합니까?
LKGuard는 본문의 어느 지점에서나 사용되지 않는 로컬 변수이므로 volatile 키워드를 사용하지 않으면 함수를 최적화 할 수 있습니까?
감사
[RVO] (http://en.wikipedia.org/wiki/Return_value_optimization)와 같이 생성자/소멸자 쌍을 최적화 할 수있는 인스턴스가 하나 또는 두 개만 있다고 생각합니다. 그렇지 않으면 나는 그것에 대해 걱정하지 않을 것이다. –
설명해 주셔서 감사합니다. 감사합니다 –