5-mudo-base-Atomic
1 类说明
一个原子(模板)类AtomicIntegerT,关于这个类的操作都是原子的
2 继承
-
noncopyable
-
表明这个类不可以拷贝复制
-
2 成员变量说明
-
value_
-
volatile T类型的。当要求使用
volatile声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据,而不是从寄存器中获取数据(备份)。而且读取的数据立刻被保存。
-
1 non-static
-
构造函数:
-
初始化value_为0
-
-
get
-
__sync_val_compare_and_swap(&value_, 0, 0) -
使用gcc提供的原子操作函数__sync_val_compare_and_swap(type *ptr, type oldval, type newval),原子比较函数
-
如果ptr == oldval,就将newval写入ptr,返回改变前的值
-
-
getAndAdd
-
__sync_fetch_and_add(&value_, x) -
__sync_fetch_and_add(type *ptr, type value) 原子自增操作,先fetch,然后自加,返回的是自加以前的值
-
-
addAndGet
-
调用getAndAdd加x
-
-
incrementAndGet
-
调用addAndGet加1
-
-
decrementAndGet
-
调用addAndGet加-1
-
-
add
-
调用getAndAdd加x
-
-
increment
-
调用incrementAndGet
-
-
decrement
-
调用decrementAndGet
-
-
getAndSet
-
__sync_lock_test_and_set(&value_, newValue) -
__sync_lock_test_and_set(type ptr, type value) 原子赋值函数, 将ptr设为value并返回*ptr操作之前的值。
-
以上gcc提供的原子操作是C++11才支持,具体可以参考
4 测试
-
用assert将各种get和set函数都测一次
5 其他
关于原子操作的扩展:

浙公网安备 33010602011771号