引入两个伪指令a=R(X)和W(b,X)。其中a=R(X)表示读取当前红包记录的ReceiverID字段(记为数据项X)到变量a中,W(b,X)表示将抢红包人的唯一标识b的值写入到当前红包记录的ReceiverID字段(数据项X)中,变量a为空值时才会执行W(b,X)操作。假设有多个人同时抢同一红包(即同时对同一记录进行操作),用ai=Ri(X)和Wi(bi,X)表示系统依次响应的第i个人的抢红包操作。假设当前数据项X为空值,同时有三个人抢同一红包,则
(1)如下的调度执行序列:
a1=R1(X),a2=R2(X),W1(b1,X),W2(b2,X),a3=R3(X)
抢到红包的是第几人?并说明理由。
(2)引入共享锁指令SLock i(X)、独占锁指令XLock i(X)和解锁指令ULock i(X),其中下标i表示第i个抢红包人的指令。如下的调度执行序列:
SLock1(X),a1=R1(X),SLock 2(X),a2=R2(X),XLock 1(X)……
是否会产生死锁?并说明理由。
(3)为了保证系统第一个响应的抢红包人为最终抢到红包的人,请使用上述(2)中引入的锁指令,对上述(1)中的调度执行序列进行修改,在满足2PL协议的前提下,给出一个不产生死锁的完整的调度执行序列。