CAS原子操作实现无锁及性能分析

来源:互联网 发布:数据营销有哪些 编辑:程序博客网 时间:2024/05/19 15:23
  1. 什么是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
原创粉丝点击