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

admin2018-04-19  35

问题 某抢红包软件规定发红包人可以一次抛出多个红包,由多个人来抢。要求每个抢红包的人最多只能抢到同一批次中的一个红包,且存在多个人同时抢同一红包的情况。给定的红包关系模式如下:
    Red(ID,BatchID,SenderID,Money,ReceiverID)
    其中ID唯一标识每一个红包;BatchID为发红包的批次,一个BatchID值可以对应多个ID值;SenderID为发红包人的标识;Money为红包中的钱数;ReceiverID记录抢到红包的人的标识。
    发红包人一次抛出多个红包,即向红包表中插入多条记录,每条记录表示一个红包,其ReceiverlD值为空值。
    抢某个红包时,需要判定该红包记录的ReceiverlD值是否为空,不为空时表示该红包已被抢走,不能再抢,为空时抢红包人将自己的标识写入到ReceiverlD字段中,即为抢到红包。
   引入两个伪指令a=R(X)和W(b,X)。其中a=R(X)表示读取当前红包记录的ReceiverID字段(记为数据项X)到变量a中,W(b,X)表示将抢红包人的唯一标识b的值写入到当前红包记录的ReceiverlD字段(数据项X)中,变量a为空值时才会执行W(b,X)操作。假设有多个人同时抢同一红包(即同时对同一记录进行操作),用ai=Ri(X)和Wi(bi,x)表示系统依次响应的第i个人的抢红包操作。假设当前数据项X为空值,同时有三个人抢同一红包,则如下的调度执行序列:
    a1=R1(X),a2=R2(X),W1(b1,X),W2(b2,X),a3=R3(X)
    抢到红包的是第几人?并说明理由。

选项

答案第2人。

解析 根据题目描述,抢红包操作是将抢红包人的ID写入到红包记录的ReceiverID字段。多人抢同一红包即为对同一数据项的读写操作。
   分析给定的调度执行序列:
    a1=R1(X),a2:R2(X),W1(b1,X),W2(b2,X),a3=R3(X)中,a1=R1(X),a3=R2(X)表示抢红包的第一、第二人读取数据项X,X当前值为空值,两人均可写入自己的ID值;而后的W1(b1,X),W2(b2,X)表示第一、第二人先后将自己的ID值写入X项,第一人写入的值会被随后第二人的写入值所覆盖,x的当前值为第二人ID;a3=R3(X)表示第三人读取X项的值,X的当前值非空(即第二人的ID),根据题目描述的规则“变量a为空值时才会执行W(b,x)操作”,第三人不能再写入自己的ID值。序列执行结束时,X项的值为第二人得ID,故抢到红包的为第二人。
转载请注明原文地址:https://kaotiyun.com/show/6rUZ777K
0

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