常见的悲观锁实现方式有几种
常见的悲观锁实现方式有两种,离别是:1、版本号机制;2、CAS算法。其中,通过版本号机制实现悲观锁是最经典的办法。版本号机制一样是在数据表中加上一个数据库版本号version字段。
实现方式:
(引荐学习:mysql教程)
1、版本号机制
一样是说在数据表中加上一个数据库版本号version字段,在表述数据被修改的次数当数据被修改时,它的version 值会加1。
如:
当然线程A需要更新数据值时,在读取数据的同时也会读取 version 值,在提交更新时,若方才读取到的 version 值为当前数据库中的 version 值相等时才更新,不然重试更新操纵,直到更新成功。
2、CAS 算法
CAS(compare and swap) 比力并交流,有三个操纵数,内存地址V ,预测值B,要更换得到的目标子A。
CAS指令施行时,比力内存地址V与预测值B可否相等,若相等则将A赋给B,(不相等则会轮回比力直到相等)整个比力赋值操纵是一个原子操纵。
CAS缺陷:
(1)轮回时间开销大:当内存地址V与预测值B不相等时会不断轮回比力直到相等;
(2)只能包管一个同享变量的原子操纵;
(3)假如一个变量V初次读取的时候是A值,并且在预备赋值的时候检查到它依然是A值,那么我们就能说明它的值没有被其他线程修改正吗?很明显不是,由于在这段时间内它的值大概被改为其他值,然后又被改回A,那CAS操纵就会认为它从来没被改正,这个问题就被称为 CAS 操纵的“ABA” 问题;
以上就是常见的悲观锁实现方式有几种的具体内容,更多请关注百分百源码网其它相关文章!