码迷,mamicode.com
首页 > 编程语言 > 详细

非阻塞同步算法与CAS(Compare and Swap)无锁算法

时间:2017-07-05 11:40:37      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:strong   href   ==   阻塞   target   lan   log   get   tar   

CAS无锁算法

要实现无锁(lock-free)的非阻塞算法有多种实现方法,其中CAS(比较与交换,Compare and swap)是一种有名的无锁算法。CAS, CPU指令,在大多数处理器架构,包括IA32、Space中采用的都是CAS指令,CAS的语义是“我认为V的值应该为A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为多少”,CAS是项乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。CAS无锁算法的java实现如下:

public synchronized int compareAndSwap(int expect, int newValue) {
        int old = this.a;
        if (old == expect) {
            this.a = newValue;
        }
        return old;
    }

CAS无锁算法的C实现如下:

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;
}

 

详细的转自:http://www.cnblogs.com/Mainz/p/3546347.html

http://www.2cto.com/kf/201312/261150.html

非阻塞同步算法与CAS(Compare and Swap)无锁算法

标签:strong   href   ==   阻塞   target   lan   log   get   tar   

原文地址:http://www.cnblogs.com/guweiwei/p/7119782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!