详细请参考:
主要用于多线程,消除了锁竞争,更为高效
实例:
template<typename T>
class AtomicIntegerT
{
public:
AtomicIntegerT()
: value_(0)
{
}
T get()
{
return __sync_val_compare_and_swap(&value_, 0, 0);
}
T getAndAdd(T x)
{
return __sync_fetch_and_add(&value_, x);
}
private:
volatile T value_;//要求该变量每次都重写读值,不会因为编译器的优化
};