死锁和活锁

活锁:简单描述:事务T1封锁了数据R事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……T2有可能永远等待,这就是活锁的情形 解决方法:采用先来先服务的策略死锁:简单描述:事务T1封锁了数据R1T2封锁了数据...
摘要由CSDN通过智能技术生成

活锁:

简单描述:

事务T1封锁了数据R

事务T2又请求封锁R,于是T2等待。

T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。

T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……

T2有可能永远等待,这就是活锁的情形

解决方法:

采用先来先服务的策略

死锁:

简单描述:

事务T1封锁了数据R1

T2封锁了数据R2

T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁

接着T2又申请封锁R1,因T1已封锁了R1T2也只能等待T1释放R1上的锁

这样T1在等待T2,而T2又在等待T1T1T2两个事务永远不能结束,形成死锁

死锁的预防:

  • 一次封锁法

每个事务必须一次将所有要使用的数据全部加锁

 

存在问题:

1.降低系统并发度

2.难于事先精确确定封锁对象

  • 顺序封锁法

顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。

 

存在问题:

1.维护成本:数据库系统中封锁的数据对象极多,并且在不断地变化。

2.难以实现:很难事先确定每一个事务要封锁哪些对象   

  • 死锁的诊断与解除

1.超时法  2.事务等待法(如果事务等待图存在回路,则表示系统中出现了死锁)


死锁的诊断与解除

解除死锁:处理死锁代价最小的事务,将其撤销释放,将其它事务继续运行

可串行化调度

多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同

DBMS并发事务不同的调度可能会产生不同的结果

例:现在有两个事务,分别包含下列操作

      事务T1:读BA=B+1;写回A

      事务T2:读AB=A+1;写回B

现给出对这两个事务不同的调度策略

(a)

T1

T

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值