阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。 [说明] 某高速路不停车收费系统(ETC)的业务描述如下: (1)车辆驶入高速路入口站点时,将驶入信息(ETC卡号,入口编号,驶入时间)写入登记表; (2)车辆驶出高速路出口站点(收费口)时,

admin2016-03-25  19

问题 阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
[说明]
某高速路不停车收费系统(ETC)的业务描述如下:
(1)车辆驶入高速路入口站点时,将驶入信息(ETC卡号,入口编号,驶入时间)写入登记表;
(2)车辆驶出高速路出口站点(收费口)时,将驶出信息(ETC卡号,出口编号,驶出时间)写入登记表;根据入口编号、出口编号及相关收费标准,清算应缴费用,并从绑定的信用卡中扣除费用。
一张ETC卡号只能绑定一张信用卡号,针对企业用户,一张信用卡号可以绑定多个ETC卡号。使用表绑定(ETC卡号,信用卡号)来描述绑定关系,从信用卡(信用卡号,余额)表中扣除费用。
针对上述业务描述,完成下列问题:
[问题2]
当车辆驶出收费口时,从绑定信用卡余额中扣除费用的伪指令如下:读取信用卡余额到变量x,记为x=R(A);扣除费用指令x=x-a;写信用卡余额指令记为W(A,x)。
(1)当两个绑定到同一信用卡号的车辆同时经过收费口时,可能的指令执行序列为: x1=R(A),x1=x1-a1,x2=R(A),x2=x2-a2,W(A,x1),W(A,x2)。此时会出现什么问题?(100字以内)
(2)为了解决上述问题,引入独占锁指令XLock(A)对数据A进行加锁,解锁指令Unlock(A)对数据A进行解锁。请补充上述执行序列,使其满足2PL协议。

选项

答案(1)出现问题:丢失修改,x1的费用扣除后写入的值被x2的覆盖,造成对x1并未扣费。 (2)加锁后的执行序列:XLock(A),x1=R(A),x1=x1-a1,W(A,x1),Unlock(A), XLock(A),x2=R(A),x2=x2-a2,W(A,x2),Unlock(A)。

解析 本问题考查并发控制。两辆车同时经过收费口,会对信用卡的同一余额数据进行操作,可能会造成数据的不一致。根据给定的指令执行序列“x1=R(A),x1=x1-a1, x2=R(A),x2=x2-a2,W(A,x1),W(A,x2)”,W(A,x1)指令对数据对象A写入的x1值会被随后的x2值所覆盖,造成丢失修改的错误。
解决的办法是引入锁机制,在修改数据前加独占锁,写入数据后再释放锁,符合两段锁协议的规定,则会避免产生数据不一致性问题。
转载请注明原文地址:https://kaotiyun.com/show/HuUZ777K
0

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