阅读下列说明,回答问题1和问题2,将解答填入答题纸的对应栏内。 【说明】 某图书馆的图书借还业务使用如下关系模式: 书目(ISBN,书名,出版社,在库数量) 图书(书号,ISBN,当前位置) 其中在库数量为当前书目可借出的图

admin2017-09-14  24

问题 阅读下列说明,回答问题1和问题2,将解答填入答题纸的对应栏内。
【说明】
    某图书馆的图书借还业务使用如下关系模式:
    书目(ISBN,书名,出版社,在库数量)
    图书(书号,ISBN,当前位置)
    其中在库数量为当前书目可借出的图书的数量,每本图书入库后都会有当前位置,借出后当前位置字段改为空值。每一条书目信息对应多本相同的图书,每一本图书只能对应一条书目。
    借还书业务的基本流程如下描述:
    (1)读者根据书名查询书目,当前书目的在库数量大于0时可借阅。
    (2)读者借出一本图书时,进行出库操作:根据该图书的书号将该图书的当前位置字段值改为空值,并根据其ISBN号将对应书目的在库数量减1。
    (3)读者归还一本图书时,进行入库操作:系统根据当前书架的空余位置自动生成该本书的存放位置,并根据该图书的书号将其当前位置字段值改为生成的存放位置,然后将对应书目的在库数量加1。
    (4)借还书时,逐一扫描每本图书的书号并进行出、入库操作。
引入两个伪指令:a=R(X)表示将在库数量X值读入到变量a中;W(a,X)表示将变量a的值写入到在库数量X中。入库操作用下标I表示,出库操作用下标O表示。
    将出库和入库操作分别定义为两个事务,针对并发序列:aO=RO(X),aI=RI(x),aO=aO-1,WO(aO,X),aI=aI+1,WI(aI,X)。其中变量aI和aO分别代表入库事务和出库事务中的局部变量。
    (1)假设当前X的值为3,则执行完上述并发序列的伪指令后,X的值是多少?简述产生这一错误的原因(100字以内)。
    (2)为了解决上述问题,引入独占锁指令XLock(X)对数据X进行加锁,解锁指令Unlock(X)对数据X进行解锁。入库操作用下标I表示,如XLocki(x);出库操作用下标O表示,如Unlocko(X)。请根据上述的并发序列,给出一种可能的执行序列,使其满足2PL协议。

选项

答案(1)X的值为4。 该序列实现的是出库一本书和入库一本书两个事务的并发执行,其结果应该是3。错误原因在于出库时X的值2被随后的入库操作改成了4,出库操作的值被覆盖。这类问题称为丢失修改。 (2)加锁后的执行序列:XLockO(X),XLockI(X),aO=RO(X),aO=aO-1,WO(aO,X),UnlockO(X),aI=RI(X),aI=aI+1,WI(aI,X),UnlockI(X)。

解析 本题考查事务并发控制知识的应用和事务程序的编写技能。
    (1)根据问题中给出的并发序列:“aO=RO(X),aI=RI(X),aO=aO-1,WO(aO,X),aI=aI+1,WI(aI,X)”及指令的说明,该序列为一个入库事务和一个出库事务的并发调度。X的当前值为3,执行完“aO=RO(X),aI=RI(X)”后,变量aO和aI的值均为3;执行完“aO=aO-1,WO(aO,X)”后,X的值被改为2;执行完“aI=aI+1,WI(aI,X)”后,X的值被改为4,即并发序列执行完后X的值。
    这两个事务分别是同一书目下两本书的出库和入库操作。根据事务并发正确性的判定,其正确的必要条件是与某一次串行的结果相同。在X当前值为3的情况下,出库一本书和入库一本书,两个事务两种串行方式下,其结果都为3。因而题目给出的并发序列的执行结果是错误的。
    错误原因在于出库事务的指令“WO(aO,X)”写入X的值后,被入库事务的指令“WI(aI,X)”所覆盖,即丢失修改错误,出库事务的修改丢失了。
    (2)根据2PL协议的规定,在修改数据前需对该数据加独占锁,前提是在该数据上没有其他事务所加的锁,否则只能等待其他事务释放锁后再加锁。题目要求只加独占锁,因此出库事务的第一条语句“aO=RO(X)”前应有加锁语句“XLockO(X)”;入库事务第一条指令“aI=RI(X)”之前应有加锁语句“XLockI(X)”,但此时X上已有出库事务上的锁,故入库事务加锁被拒绝,只能等待,到出库事务释放锁之后才能加上锁,入库事务的后续指令才能得以执行。
转载请注明原文地址:https://jikaoti.com/ti/pwN7FFFM
0

相关试题推荐
最新回复(0)