阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某连锁酒店提供网上预订房间业务,流程如下: (1)客户查询指定日期内所有类别的空余房间数,系统显示空房表(日期,房间类别,数量)中的信息; (2)客户输入预订的起始日期和结束日期、房

admin2014-08-23  26

问题 阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某连锁酒店提供网上预订房间业务,流程如下:
(1)客户查询指定日期内所有类别的空余房间数,系统显示空房表(日期,房间类别,数量)中的信息;
(2)客户输入预订的起始日期和结束日期、房间类别和数量,并提交;
(3)系统将用户提交的信息写入预订表(身份证号,起始日期,结束日期,房间类别,数量),并修改空房表的相关数据。
针对上述业务流程,回答下列问题。
引入如下伪指令:将预订过程作为一个事务,将查询和修改空房表的操作分别记为R(A)和W(A,x),插入预订表的操作记为W(B,a),其中x代表空余房间数,a代表预订房间数。则事务的伪指令序列为:x=R(A),W(A,x—a),W(B,a)。
在并发操作的情况下,若客户1、客户2同时预订相同类别的房间时,可能出现的执行序列为:x1=R(A),x2=R(A),W(A,x1-a1),W(B1,a1),W(A,x2一a2),W(B2,a2)。
(1)此时会出现什么问题,请用100字以内文字简要叙述。
(2)为了解决上述问题,引入共享锁指令SLock(X)和独占锁指令XLock(X)对数据X进行加锁,解锁指令Unlock(X)对数据X进行解锁,请补充上述执行序列,使其满足2PL协议,不产生死锁且持有锁的时间最短。

选项

答案(1)出现问题:丢失修改,客户1预订a1数量房间后,对空房数量的修改被T2的修改覆盖,造成数据不一致。 (2)XLOCK(A),xl=R(A),W(A;x1—a1),XLOCK(B),UNLOCK(A),W(B1,a1),UNLOCK(B),XLOCK(A),x2=R(A),W(A,x2-a2),XLOCK(B),UNLOCK(A),W(B2,a2),UNLOCK(B)。

解析 本题考查对并发事务调度的理解。调度出现的执行序列为:x1=R(A),x2=R(A),W(A,x1一a1),W(B1,a1),W(A,x2-a2),W(B2,a2)。表明两个用户读到了相同的空房数量(x1=x2),再减去自己的订房数后写入空房表,并分别写入各自的订房记录。客户1对空房数的修改随后会被客户2的修改所覆盖,造成丢失修改的不一致性。按2PL协议的规定,每个事务中的加解锁指令不能交替出现。若使其不产生死锁,则不能出现锁竞争,持有锁的时间最短,应即时释放锁。
转载请注明原文地址:https://jikaoti.com/ti/kwN7FFFM
0

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