为什么有了事务还需要乐观锁和悲观锁?

transaction-lock

为什么有了事务这东西,还需要乐观锁悲观锁?

首先,事务是粗粒度的概念、乐观锁悲观锁可以更细粒度的控制。怎么理解呢?

举个例子:

比如抢票,假设余票只有1张;隔离级别可以保证事务A和事务B不能读到对方的数据,也不能更新对方正在更新的数据,但是事务A和事务B都认为还有1张余票,于是出票,并更新为0;

事务解决了并发问题,已经不存在并发问题了;

但是事务B读取的是过时数据,依据过时数据做了业务处理;

所以需要乐观锁或者悲观锁,来记录一个信息:当前已经读取的数据,是不是已经过时了!

 

事务有这么几种实现方式:

锁协议、MVCC、时间戳排序协议、有效性检查协议,锁协议是事务的一种实现方式,事务只是用锁封装的一个函数,可以重用而已,但是这几个事务的函数覆盖面太粗粒度了,所以有时候我们还得借助于锁来进行细粒度控制;事务不能保证每个操作结果正确,售票时超卖还是会发生。事务保证整个操作的成一个组,要么全做要么全不做?但是不能保证多个事务同时读取同一个数据

数据对象被加上排它锁时,其他的事务不能对它读取和修改;加了共享锁的数据对象可以被其他事务读取,但不能修改事务可以用锁实现,可以保证一致性和隔离性,但是锁用来保证并发性;

隔离性和并发性有点类似,但是隔离性只是保证不会出现相互读取中间数据,却无法解决并发的问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值