某抢红包软件规定发红包人可以一次抛出多个红包,由多个人来抢。要求每个抢红包的人最多只能抢到同一批次中的一个红包,且存在多个人同时抢同一红包的情况。给定的红包关系模式如下: Red(ID,BatchID,SenderID,Money,Receiver

admin2018-04-19  36

问题 某抢红包软件规定发红包人可以一次抛出多个红包,由多个人来抢。要求每个抢红包的人最多只能抢到同一批次中的一个红包,且存在多个人同时抢同一红包的情况。给定的红包关系模式如下:
    Red(ID,BatchID,SenderID,Money,ReceiverID)
    其中ID唯一标识每一个红包;BatchID为发红包的批次,一个BatchID值可以对应多个ID值;SenderID为发红包人的标识;Money为红包中的钱数;ReceiverID记录抢到红包的人的标识。
    发红包人一次抛出多个红包,即向红包表中插入多条记录,每条记录表示一个红包,其ReceiverlD值为空值。
    抢某个红包时,需要判定该红包记录的ReceiverlD值是否为空,不为空时表示该红包已被抢走,不能再抢,为空时抢红包人将自己的标识写入到ReceiverlD字段中,即为抢到红包。
引入共享锁指令SLocki(X)、独占锁指令XLocki(X)和解锁指令UnLocki(X),其中下标i表示第i个抢红包人的指令。如下的调度执行序列:
    SLock1(X),a1=R1(X),SLock2(X),a2=R2(X),XLock1(X)…
    是否会产生死锁?并说明理由。

选项

答案会产生死锁。

解析 引入锁指令后的调度执行序列:
SLock1(X),a1=R1(X),SLock2(X),a2=R2(X),XLock1(X)…中,执行完指令SLock1(X),a1=R1(X),SLock2(X),a2=R2(X)后,数据项X上有事务T1(第一人的抢红包事务)和事务T2(第二人的抢红包事务)分别加的共享锁;随后的指令XLock1(X)为事务T1再对数据项加独占锁,此时数据项x上已有事务T2所加的共享锁。根据锁冲突规则,XLock1(X)指令加锁失败,事务T1处于等待状态,等待事务T2释放X上的共享锁;根据事务的程序逻辑,稍后事务T2也会运行XLock2(X)指令申请对X数据项加独占锁,同样的,事务T2会等待事务T1释放X上的共享锁,T1、T2两个事务相互等待对方释放锁,陷入死锁状态。
转载请注明原文地址:https://jikaoti.com/ti/XVN7FFFM
0

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