原子变量和原子操作

1、什么是原子变量和原子操作
原子操作是指不会被线程调度机制打断的操作;原子操作一旦开始,就一直运行到结束,中间不会切换到任何别的进程。
原子变量是原子操作的基本单位。

2、原子变量和原子操作的功能是什么
在多进程(线程)访问共享资源时,能够确保所有其他的进程(线程)都不在同一时间内访问相同的资源。
例如,atomic_bool,atomic_int等等,如果我们在多个线程中对这些类型的共享资源进行操作,编译器将保证这些操作都是原子性的,也就是说,确保任意时刻只有一个线程对这个资源进行访问,编译器将保证,多个线程访问这个共享资源的正确性。从而避免了锁的使用,提高了效率。
定义一个变量,将对一个变量值的读取、修改、回写变成一个不可打断的操作,这个变量就是原子变量。

3、原子变量和原子操作的应用
常用原子操作函数举例:

		atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0
		atomic_**read**(atomic_t *v); //返回原子变量的值
		void atomic_**inc**(atomic_t *v); //原子变量增加1
		void atomic_**dec**(atomic_t *v); //原子变量减少1
		int atomic_**dec_and_test**(atomic_t *v); //自减操作后测试其是否为0,为0则返回true,否则返回false。

常见的原子操作举例:

		#define atomic_**read**(v) ((v)->counter) //读取v指向的原子变量的值
		#define atomic_**set**(v,i) (((v)->counter) = (i)) //设置v指向的原子变量的值为i。
		static *__inline__* void atomic_**sub**(int i,atomic_t *v)  //从v指向的原子变量减去i。
		static __inline__ void atomic_**inc**(atomic_t *v) //递增v指向的原子变量。

C++11下的用法:

		#include<atomic>
		atomic_int count(0);//声明并初始化

4、方法

getAndSet - >原子设置为给定值并返回上一个值。

compareAndSet - >”如果当前值==期望值,则以原子方式将值设置为给定的更新值。

getandincrement :得到当前值,并自增一。https://blog.csdn.net/camelcanoe/article/details/85099337

incrementAndGet:

通过源码分析可知,incrementAndGet()和 getAndIncrement ()都调用了 Unsafe 类中的 getAndAddInt() 方法,区别是:

① 前者,先+1,再返回

② 后者,先返回,再 +1

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值