首页 > 编程知识 正文

用了乐观锁还需要事物吗,常见锁机制

时间:2023-05-04 22:24:43 阅读:135949 作者:733

乐观锁1、版本号机制2、CAS操作悲观锁1、同步2、锁定

乐观锁1、版本号机制

数据库的MVCC机制就是这样,MVCC更严格,后来增加了创建版本和删除版本两个字段。

详情参考:

3359 blog.csdn.net/numb be/article/details/109300087

版本号的结构也是CAS操作的一种,首先进行比较,然后替换。

例如,我有一张学生表。 有两个字段。 饭卡的余额和版本。 初始化时,饭卡余额为100,版本为1。

1、线程a吃饭刷20元,余额修改为80,首先进行读数操作,学生此时记录余额为100,版本号为1。

2、线程b吃饭刷40元,修改为余额60,首先进行读数操作,学生此时记录余额100,版本号1。

3、线程a提交。 提交的版本是1 1=2。 再读一遍,查看最新数据,提交版本的当前版本1,可以提交,提交成功。

4、线程b提交。 提交的版本为1(1=2)。 再读一遍,看看最新的数据。 提交版本为2,当前版本为2,不满足【提交版本当前版本】的前提条件,提交失败。

(这里可以直接核对版本号码,但如果版本号码和自己记录的版本号码不一致,说明有人动了,所以不提交)

(这两种比较方式都确定其他线程是否更改了数据。)

(百度看了很多文章,有人说要比较版本号是否相等,也有人说要判断版本的大小。 我们不知道到底发生了什么。

线程A与线程B是有先后顺序的,线程A更新执行后,线程B再执行, 这个时候线程B应该使用最新的数据,而不是使用版本1的旧数据。

你要提交的数据,版本号是要大于当前版本的。如果小于等于当前最新版本,说明已经有其他线程修改过了。

2、CAS操作简单来说就是读写。

第一次读,记录数据。

第二次读取与数据进行对照。

开始写。

compare and swap、无锁算法和无阻塞同步。

CAS算法包括三个操作数。

旧值v比较值a的新值b,只有在a和v相等的情况下,CAS才能用原子方式用新值b更新v。

悲观摇滚我们最常用的摇滚,比如下面两个是悲观摇滚,悲观摇滚是摇滚,乐观摇滚是不会被摇滚的。

1、同步http://www.Sina.com /

3359 blog.csdn.net/numb be/article/details/113178567

2、lock 参考:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。