在所有支持的架构上,如何在 Qt4 中以原子方式读取 QAtomicInt 或 QAtomicPointer 的值?我不关心这里的内存顺序,我只想确保如果另一个线程同时更改值,我不会读取部分旧的、部分新的值。
在 Qt4 中,这些类只有 int 或 T* 的强制转换运算符。似乎有更新的代码(http://qt.gitorious.org/qt/qtbase/blobs/master/src/corelib/thread/qbasicatomic.h)区分非原子load()和原子loadAcquire()。C++11 原子也有一个原子 load() ( http://en.cppreference.com/w/cpp/atomic/atomic/load )。这就是为什么我担心Qt4提供的方法不够安全。
我知道 fetchAndAddRelaxed(0) 应该可以工作,但它看起来像一个 hack,并且在性能方面可能不是最佳的。