目录
知识点:封锁+活锁+死锁+可串行化调度
考题1:可串行化调度
考题2:调度正确判断&共享锁+写锁
考题3: 事务调度+死锁
知识点:封锁+活锁+死锁+可串行化调度
考题1:可串行化调度
考题2:调度正确判断&共享锁+写锁
现在有两个事务,分别包含以下操作:
事务T1:读A: B=A+200;写回B。
事务T2:读B: A=B+100; 写回A。
设A和B的初始值分别是100和200。如下调度是
否是正确的调度?说明理由。
在按照图中顺序运行时,其运行结果为:A=300,B=300。与
情况1:T1 -> T2次序运行,结果A=400,B=300。
情况2:T2 -> T1次序运行,结果A=300, B=500。都不相同。故,错误。
考题3: 事务调度+死锁
给定A和B两个事务,设i和j的初始值分别是20和80。
事务A 事务B
读i; 读i;
i:=i*i; 读j;
写i; j:=i*j;
写j;
(1)请问如下调度是否是正确的调度,并说明理由。
(2)请问事务A和事务B在执行过程中,是否会发生死锁?为什么?
- 正确。考虑B -> A次序执行,i=400,j=1600。与图中结果相符合。
- 不会死锁。因为事务A仅对i封锁和释放
事务B中封锁和释放j,不会有
A领B锁住的数据,同时
B锁A已经封锁过的数据