试题五(共15分)阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。[说明]假设有两项业务对应的事务T1、T2与存款关系有关:. 转账业务:T1(A,B,50),从账户A向账户B转50元;. 计息业务:T2,对当前所有账户的余额计算利息,余额为X*l.01针对上述业务流程,回答下列问题:
[问题2](8分)若上述两个事务的一个并发调度结果如下:(1)上述调度是否正确,为什么 (3分)(2)引入共享锁指令Slock()、独占锁指令Xlock()和解锁指令Unlock(),使上述调度满足两段锁协议,并要求先响应T1的请求。请给出一个可能的并发调度结果。(5分)
参考答案:(1)调度不正确 结果为:A=50.5 B=252 原因:与任何一个串行结果都不同。 (2)满足两段锁协议的调度:
解析:本题考查对事务设计、并发控制的理解和掌握。 两个事务T1、T2的串行执行只有两种方式:Tl执行完执行T2(记为:T1->T2)和T2执行完执行Tl(记为:T2->T1),结合A、B的初值,即可计算出T2->Tl的执行结果。 根据A、B的初值,按照给定的调度,获得执行结果为:A=50.5,B=252,与任何一个串行执行的结果都不同,为错误的调度,事实上会造成储户的无端损失。 引入两段锁协议后可保证调度的正确。根据锁类型和加解锁的要求,本题中所有的读取随后即要修改,对应了SQL中的UPDATE指令,可直接加X锁,具体参见参考答案:。 若将计息业务T2改为对单个账户的余额计算利息,根据提示的情况,调度结果可能存在不一定性,这样的事务设计是错误的。