某抢红包软件规定发红包人可以一次抛出多个红包,由多个人来抢。要求每个抢红包的人最多只能抢到同一批次中的一个红包,且存在多个人同时抢同一红包的情况。给定的红包关系模式如下:Red(ID,BatchID,SenderID,Money,ReceiverID)其中 ID 唯一标识每一个红包; BatchID 为发红包的批次,一个 BatchID 值可以对应多个ID 值;SenderID 为发红包人的标识;Money 为红包中的钱数; ReceiverID 记录抢到红包的人的标识。发红包人一次抛出多个红包,即向红包表中插入多条记录,每条记录表示一个红包, 其 ReceiverID 值为空值。抢某个红包时,需要判定该红包记录的 ReceiverID 值是否为空,不为空时表示该红包己被抢走,不能再抢,为空时抢红包人将自己的标识写入到 ReceiverID 宇段中,即为抢到红包。
【问题1】引入两个伪指令 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, a2 = R2(X),W1(b1 ,X),W2(b2,X), a3 = R3(X)抢到红包的是第几人?并说明理由。
(2)引入共享锁指令 SLocki(X)、独占锁指令XLocki(X)和解锁指令 ULocki(X) ,其中下标i表示第i个抢红包人的指令。如下的调度执行序列:SLock1(X),a1 = R1(X),SLock2(X),a2 = R2(X),XLock1(X)......是否会产生死锁?并说明理由。
(3)为了保证系统第一个响应的抢红包人为最终抢到红包的人,请使用上述中引入的锁指令,对上述(1)中的调度执行序列进行修改,在满足2PL协议的前提下,给出一个不产生死锁的完整的调度执行序列。
【问题2】下面是用 SQL实现的抢红包程序的一部分,请补全空缺处的代码CREATE PROCEDURE ScrambleRed (IN BatchNo VARCHAR(20) , —红包批号( IN RecvrNo VARCHAR(20) ) 一接收红包者BEGIN—是否已抢过此批红包if exist s( SELECT * FROM Red WHERE BatchID = BatchNo AND ReceiverID = RecvrNo) thenreturn -1;end if;---读取此批派发红包中未领取的红包记录IDDECLARE NonRecvedNo VARCHAR(30);DECLARE NonRecvedRed CURSOR FORSELECT ID FROM RedWHERE BatchID = BatchNo AND ReceiverID IS NULL;-打开游标OPEN NonRecvedRed;FETCH NonRecvedRed INTO NonRecvedNo;while not error一抢红包事务BEGIN TRANSACTION;//写入红包记录UPDATE RED STE RECDIVER ID =RecvrNoWHERE ID = nonRECVED AND( a )//执行状态判定Ifimage.png修改的记录数>= 1 THENCOMMIT;( b );Return 1;ElseROLLBACK;End if;( c );End while--关闭游标CLOSE NonRecved RDReturn 0;END
正确答案及解析
正确答案
解析
【问题1】(1)第2人,并发操作出现了丢失更新的问题,第2个的更新覆盖了第1个的更新,原因是破坏了事物的隔离性。(2)会产生死锁,由于数据X同时被1和2加锁了S锁,再对方没有释放的时候,都无法加成功X锁,导致1和2一直都处于等待的状态(3)XLock(X) a=R(X) W(b,X)UNLock(X)
【问题2】(a)BatchID=BatchNo(b)CLOSE NonRecvedRed(c)END TRANSACTION
你可能感兴趣的试题
一台主机的IP地址为202.123.25.36,掩码为255.255.254.0。如果该主机需要在该网络进行直接广播,那么它应该使用的目的地址为( )
-
- A.202.123.25.0
- B.202.123.25.255
- C.202.123.24.0
- D.202.123.24.255
- 查看答案
在计算机系统的日常维护工作中,应当注意硬盘工作时不能__(2)__。另外,需要防范病毒,而__(3)__是不会被病毒感觉的。
-
- A.电子邮件
- B.硬盘
- C.U盘
- D.ROM
- 查看答案
有 4 个 IP 地址:201.117.15.254、201.117.17.01、201.117.24.5 和 201.117.29.3,如果子网掩码为 255.255.248.0,则这 4 个地址分别属于3个子网;其中属于同一个子网的是()
-
- A.201.117.15.254 和 201.117.17.01
- B.201.117.17.01 和 201.117.24.5
- C.201.117.15.254 和 201.117.29.3
- D.201.117.24.5 和 201.117.29.3
- 查看答案
在异步通信中,每个字符包含1位起始位、7位数据位、1位奇偶位和1位终止位,每秒钟传送200个字符,采用4相位调制,则码元速率为()。
-
- A.50波特
- B.500波特
- C.550波特
- D.1000波特
- 查看答案
在 Windows 中,运行( )命令得到下图所示结果。以下关于该结果的叙述中,错误的是( )。
Pinging 59.74.111.8 with 32 bytes of data:
Reply from 59.74.111.8: bytes=32 time=3ms TTL=60
Reply from 59.74.111.8: bytes=32 time=5ms TTL=60
Reply from 59.74.111.8: bytes=32 time=3ms TTL=60
Reply from 59.74.111.8: bytes=32 time=5ms TTL=60
Ping statistics for 59.74.111.8:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 3ms, Maximum = 5ms, Average = 4ms
-
- A.该命令使得本地主机向目标主机发送了 4 个数据包
- B.本地主机成功收到了目标主机返回的 4 个数据包
- C.本地主机与目标主机连接正常
- D.该命令用于查看目标主机的 IP 地址
- 查看答案