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;}
阅读全文
0 0
- muduo库源码学习(base)Atomic
- muduo库源码学习(base)AsyncLogging
- muduo库源码学习(base)Condition
- muduo库源码学习(base)CountDownLatch
- muduo库源码学习(base)Date
- muduo库源码学习(base)Exception
- muduo库源码学习(base)FileUtil
- muduo库源码学习(base)mutex
- muduo库源码学习(base)singleton
- muduo库源码学习(base)ThreadLocal
- muduo库源码学习(base)ThreadLocalSingleton
- muduo库源码学习(base):Logfile
- muduo库源码学习(base):LogStream
- muduo库源码学习(base):WeakCallback
- [Muduo网络库源码分析] (1) base/Atomic.h_原子操作与原子整数
- muduo库源码学习(base)BlockingQueue和BoundBlockingQueue
- muduo库源码学习(base)Thread和CurrentThread
- muduo网络库源码学习————原子性操作Atomic.h
- 个人博客
- spring框架详解(四)--AOP代理
- CrankStoryboard 中动画的相关函数
- Win7/Win10以管理员权限注册控件批处理文件
- Failed to process phase POST_MODULE of deployment 报错
- muduo库源码学习(base)Atomic
- 转载:深度学习网络 之Dropout
- Android Dialog弹窗提示,在4.4.4和5.1中会默认显示Dialog的title
- 脚手架vue-cli构建vue项目
- Java里不改变内存的指向而改变String的值
- MFC ListCtrl Report模式下添加首列图标
- bzoj 3998 第K小子串
- Linux基本命令---1
- 【知识整理】这可能是最好的性能优化教程(一)