利用CAS机制实现多进程,多线程下的无锁并发控制

来源:互联网 发布:ubuntu fcitx 编辑:程序博客网 时间:2024/06/08 13:17

CAS机制:

CAS,又称Compare-and-Swap,代表一种原子操作

一, 为每一个Node在Set的时候分配一个cas值,(本质是版本号,返回的Node和存储Node的cas值一样,每次要更新这个Node时要检查cas的值是否与取出来时一致)

二, 只有在Update一个key的value时才会造成多线程冲突,只是Set/Get是不会的,单线程也不会并发问题。

三, 如何维护每个线程/进程的cas的值:

        增加步进的概念:cas每次自增每个线程都不一样,这样的话,每个线程有一个确定的变量,如果是由其它线程修改的一定与本线程的cas不一样

        1, 每个线程/进程有一个初始化的index,如果有10个进程就是编号为0 ~9

        2, 每次cas值增加都是按进程数来加,step[0] += 10,这样能保证每个进程的cas都不会一样

        3,缺点是需要额外的初始化


使用场景:

线程T1对key1、线程T2对Key1并发Get更新了Value值后想Set回去,可能会出现后一个操作覆盖前一个操作值,而且这个值是涉及到事务性的。正确是应该是T1 Set完后,T2才能取,串行化操作。

CAS就是解决这个问题,如果发现cas值不一样了,就会Set失败,需要重取再设置,假定某时刻T1 的cas值为20,T2 的cas值为21。如果没有步进时,T1处理后cas值为21,T2再处理就认为没有改变过。


 

原创粉丝点击