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

admin2018-04-19  37

问题 某抢红包软件规定发红包人可以一次抛出多个红包,由多个人来抢。要求每个抢红包的人最多只能抢到同一批次中的一个红包,且存在多个人同时抢同一红包的情况。给定的红包关系模式如下:
    Red(ID,BatchID,SenderID,Money,ReceiverID)
    其中ID唯一标识每一个红包;BatchID为发红包的批次,一个BatchID值可以对应多个ID值;SenderID为发红包人的标识;Money为红包中的钱数;ReceiverID记录抢到红包的人的标识。
    发红包人一次抛出多个红包,即向红包表中插入多条记录,每条记录表示一个红包,其ReceiverlD值为空值。
    抢某个红包时,需要判定该红包记录的ReceiverlD值是否为空,不为空时表示该红包已被抢走,不能再抢,为空时抢红包人将自己的标识写入到ReceiverlD字段中,即为抢到红包。
为了保证系统第一个响应的抢红包人为最终抢到红包的人,请使用上述引入的锁指令,对上述的调度执行序列进行修改,在满足2PL协议的前提下,给出一个不产生死锁的完整的调度执行序列。

选项

答案执行序列: XLock1(X),a1=R1(X),W1(b1,X),UnLock1(X),XLock2(X),a2=R2(X),UnLock2(X),XLock3(X),a3=R3(X),UnLock3(X) 注:答案不唯一

解析 为了保证系统第一个响应的抢红包人为最终抢到红包的人,抢红包事务可以在
读取数据项X之前执行XLock(X)直接加独占锁,此后的抢红包事务对X项加锁,只能
等待第一人的事务T1执行结束,此时数据项已写入第一人的ID值,后续事务读到非空值,无法再写入自己的ID。
    直接使用XLock(X)后的指令序列为:XLock1(X),a1=R1(X),W1(b1,X),UnLock1(X),XLock2(X),a2=R2(X),UnLock2(X),XLock3(X),a3=R3(X),UnLock3(X)
转载请注明原文地址:https://jikaoti.com/ti/kVN7FFFM
0

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