[说明]
某大中型电器商场仓库对货物的存取由多台配送车自动化完成,该仓库有多个入口和出口。当空配送车进入该仓库时,从仓库入口处由配送控制系统查询相应电器放置的货架位置(假设每台电器占用唯一的货架位置);当配送车装载货物从出口驶出时,系统将相应的货架位置标记设置为空。
假设实现电器商场仓库系统管理的伪指令如表8-5所示。
根据上述描述,在商场仓库入口处的伪代码程序如下。
x = Get ();
IF x =NULL THEN return 0;
Writ (x,1);
1. 若两辆配送车在不同的入口处同时执行上述代码,则可能会出现什么问题请用100字以内的文字简要说明。
参考答案:(A)满足BPL协议的伪代码
SLock(T);
x = Get();
IF x = NULL THEN return 0;
Upgrade(T);
Writ(x,A);
Unlock(T);
(B) 会产生死锁
一个产生死锁的调度示例如表H-F所示(注:调度次序不局限于本参考答案:,但执行语句不能写在一行,必须是并发而不能是串行,且在Upgrade后等待)
解析:
这是一道要求读者掌握2PL协议实际应用的综合理解题,本试题的解答思路如下。
(1) 2PL协议规定:读数据前加S锁,事务结束时释放;写数据前加X锁,事务结束时释放;当要修改数据时,事务应对自己的加的S锁升级为X锁。
为保证入口处伪代码正确地并发执行,引入共享锁指令SLock(T)和独占锁指令XLock(T)对表T进行加锁;Upgrade(T)用于对表T所加的共享锁升级为独占锁;解锁指令Unlock(T)用于对表T进行解锁。满足2PL协议入口处的伪代码程序如下。
SLock(T);
x = Get ();
IF x = NULL THEN return 0;
Upgrade (T);
Writ (x,1);
Unlock (T);
(2) 2PL协议解决的是事务并发时的正确调度,并不能解决死锁问题。通常,死锁问题是由数据库管理系统(DBMS)进行检测和解除的。因此,满足2PL协议的入口处的伪代码程序,在并发执行时还有可能会产生死锁。例如,一个产生死锁的调度示例如表8-6所示。
[*]