CAS原子操作实现无锁及性能分析
来源:互联网 发布:数据营销有哪些 编辑:程序博客网 时间:2024/05/19 15:23
什么是CAS原子操作
在研究无锁之前,我们需要首先了解一下CAS原子操作——Compare & Set,或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCHG 汇编指令。
大家应该还记得操作系统里面关于“原子操作”的概念,一个操作是原子的(atomic),如果这个操作所处的层(layer)的更高层不能发现其内部实现与结构。原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序是不可以被打乱,或者切割掉只执行部分。有了这个原子操作这个保证我们就可以实现无锁了。
CAS原子操作在维基百科中的代码描述如下:
int compare_and_swap(int* reg, int oldval, int newval) { ATOMIC(); int old_reg_val = *reg; if (old_reg_val == oldval) *reg = newval; END_ATOMIC(); return old_reg_val; }
也就是检查内存*reg里的值是不是oldval,如果是的话,则对其赋值newval。上面的代码总是返回old_reg_value,调用者如果需要知道是否更新成功还需要做进一步判断,为了方便,它可以变种为直接返回是否更新成功,如下:
bool compare_and_swap (int *accum, int *dest, int newval) { if ( *accum == *dest ) { *dest = newval; return true; } return false; }
0 0
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- memcache CAS实现原子操作
- 用原子操作实现无锁编程
- 使用循环CAS实现原子操作
- 使用循环CAS实现原子操作
- CAS无锁操作
- 基于C++ STL利用CAS原子操作封装的无锁list
- Android Environment 获取各种路径的方法
- CCAA
- Ext 向Ext.form.ComboBox()中添加列表的分类
- Android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
- leetcode -- Binary Tree Level Order Traversal & II-- 重点
- CAS原子操作实现无锁及性能分析
- 循环的理解和比较
- 151207 iOS之 nil null 和nsnull
- 使用 CreateTimerQueueTimer 定时器时需要注意的一个参数
- Java 学习历程(一)程序执行过程
- 利用Detours进行API拦截
- Android开发黄金搭档:Android Studio + Genymotion模拟器
- sql 转换 自定义函数
- qt将http更改为https