怎样阻止编译器因优化而缩短对象生命周期?
1.
- C/C++ code
AutoLock(Object.GetSyncObject());
2.
- C/C++ code
AutoLock(Object.GetSyncObject()) locker;
第一种方案无法完成加锁动作
第二种方案可以完成加锁动作,但是不能排除编译器什么时候就把他优化了。
现在的要求是,阻止编译对其的优化,而保留全局和函数其他地方的优化。
How can I do it?
[解决办法]
一般来说,有复杂构造函数的类对象是不会优化的。你用的啥编译器,啥编译选项,这么强劲?
[解决办法]
加volatile限定
有的编译器也有相关的禁用代码段优化指导
[解决办法]
[解决办法]
证明问题确实存在后再讨论解决方案。否则就是杞人忧天了。
你在挑战C++界赖以自豪的raii啊。
[解决办法]