mysql乐观锁实现⽅式_常见的乐观锁实现⽅式有⼏种
常见的乐观锁实现⽅式有两种,分别是: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)只能保证⼀个共享变量的原⼦操作;mysql下载后的初次使用
(3)如果⼀个变量V初次读取的时候是A值,并且在准备赋值的时候检查到它仍然是A值,那么我们就能说明它的值没有被其他线程修改过吗?很明显不是,因为在这段时间内它的值可能被改为其他值,然后⼜被改回A,那CAS操作就会认为它从来没被改过,这个问题就被称为CAS 操作的“ABA” 问题;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。