muduo库源码学习(base)Atomic

来源:互联网 发布:中科软件怎么样 编辑:程序博客网 时间:2024/05/16 17:40
/*
完成原子类型的封装
*/
template<typename T>class AtomicIntegerT : boost::noncopyable{ public:  AtomicIntegerT()    : value_(0)  {  }  // uncomment if you need copying and assignment  //  // AtomicIntegerT(const AtomicIntegerT& that)  //   : value_(that.get())  // {}  //  // AtomicIntegerT& operator=(const AtomicIntegerT& that)  // {  //   getAndSet(that.get());  //   return *this;  // }    T get()  {    // in gcc >= 4.7: __atomic_load_n(&value_, __ATOMIC_SEQ_CST)    return __sync_val_compare_and_swap(&value_, 0, 0);  }//返回值,然后加上x  T getAndAdd(T x)  {    // in gcc >= 4.7: __atomic_fetch_add(&value_, x, __ATOMIC_SEQ_CST)    return __sync_fetch_and_add(&value_, x);  }//加上x再返回  T addAndGet(T x)  {    return getAndAdd(x) + x;  }//相当于++i  T incrementAndGet()  {    return addAndGet(1);  }//--i  T decrementAndGet()  {    return addAndGet(-1);  }  void add(T x)  {    getAndAdd(x);  }  void increment()  {    incrementAndGet();  }  void decrement()  {    decrementAndGet();  }  T getAndSet(T newValue)  {    // in gcc >= 4.7: __atomic_exchange_n(&value, newValue, __ATOMIC_SEQ_CST)    return __sync_lock_test_and_set(&value_, newValue);  } private:  volatile T value_;//关于 volatile,知乎上的意见是,它在这里没有实际作用};}typedef detail::AtomicIntegerT<int32_t> AtomicInt32;typedef detail::AtomicIntegerT<int64_t> AtomicInt64;}

原创粉丝点击