常见的悲观锁实现方式有几种
常见的悲观锁实现方式有两种,离别是: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” 题目;
以上就是常见的悲观锁实现方式有几种的细致内容,更多请关注 百分百源码网 其它相干文章!