Tbb 中的原子操作
来源:互联网 发布:mongodb是什么数据库 编辑:程序博客网 时间:2024/05/18 17:05
我们可以使用原子操作来避免使用互斥,原子操作比加锁保护要快,并且不会产生死锁。原子操作的缺点是可供使用的原子操作比较少也比较简单,针对比较复杂的同步场景,仅使用原子操作很难满足需求。
针对简单场景,我们应该尽量使用原子操作代替加锁,因为原子操作实现简单并且有更好的性能,使用tbb 中的 atomic<T>
就可以简单的应用原子操作
Atomic 提供的基础原子操作
下面是使用原子操作实现的对多线程环境下计数器的累加
atomic<unsigned> counter;unsigned GetUniqueInterger(){ return counter.fetch_and_add(1);}
无论有多少线程同时执行GetUniqueInterger 函数,我们都可以保证计数器得到正确的数值。
compare_and_swap 是很多non-block 算法中都需要的原子操作。compare_and_swap 主要用于解决基于当前线程读取到的global_x的旧值更新 global_x(可以理解为保证一段更新操作的原子性)
atomic<int> globalx;// 更新globalx 并且返回更新前globalx 的值int UpdateX(){ do { // 一个线程读取到的 globalX存储到oldx oldx = globalx; // 基于oldx 计算出要更新的值 newx = ...expression involving oldx.... // Store new value if another thread has not changed globalX. }while(globalx.compare_and_swap(newx,oldx)!=oldx ); return oldx;}
compare_and_swap 可能存在的问题是一些线程在执行上面函数的时候会不断循环直到没有其他线程干扰。一般来说,如果计算新数值只需要少数指令的话,这种方式相比加锁的方式更快。
阅读全文
0 0
- Tbb 中的原子操作
- tbb学习笔记(二):原子操作
- linux中的原子操作
- Nginx中的原子操作
- java中的原子操作
- Nginx中的原子操作
- Java中的原子操作
- linux2.6中的原子操作
- Unix(Linux)中的原子操作
- C++ 中的原子性操作
- linux内核中的原子操作
- boost中的atomic_int原子操作
- [C++]gcc中的原子操作
- java中的原子性操作
- boost中的atomic_int原子操作
- java中的原子操作类
- 多线程环境中的原子操作
- Java中的原子操作类
- 国家纪念日,让你的网站全站和图片变成灰色代码
- adb shell am start -d 启动应用之uri被*吃了
- aframe.js通过three.js的THREE.PlaneGeometry创建随机山地地形
- 递归和回溯经典题目--n皇后问题
- 各种动画
- Tbb 中的原子操作
- 表格展示+多余数据省略+鼠标悬浮显示
- 编程语言是部车,你选了其中哪辆?
- 关于JavaScript调试的十来个小Tips
- docker学习2|在容器中部署nginx并保存、运行容器
- shell基本语法
- python:安装git
- 数论——中国剩余定理
- PTA 6-2 单链表元素定位(12 分)