问题 问答题


阅读下列说明,回答问题1至问题3,将解答填入的对应栏内。
[说明]
某停车场有多个入口和出口,车辆进入时从入口处由系统查询可用的停车位,从出口驶出时系统将其刚使用的车位标记为空车位。
假设实现停车场管理的伪指令如下表1所示:


根据上述描述,在入口处的伪代码程序为:
x=Get();
IF x=NULL THEN return 0;
Writ(x,1);

[问题1]
为保证入口处伪代码正确地并发执行,引入共享锁指令SLock(T)和独占锁指令XLock(T)对表T进行加锁;Upgrade(T)对表T所加的共享锁升级为独占锁;解锁指令 Unlock(T)对表T进行解锁。
(1)请修改上述入口处的伪代码程序,使其满足2PL协议。
(2)满足2PL协议的入口处的伪代码程序,在并发执行时是否会产生死锁 若是,给出一个产生死锁的调度。

答案

参考答案:

解析:(1)满足2PL协议的伪代码: SLock(T); x=Get(); IF x=NULL THEN return 0; Upgrade(T) Writ(x,1); Unlock(T); (2)会产生死锁,调度如下:

注:调度次序不局限于本参考答案:,但执行语句不能写在一行,必须是并发而不能是串行,且在Upgrade后等待。

[分析]: [问题2]考查对2PL协议的掌握和实际应用的能力,考生要清楚何时回锁,加什么类型的锁,以及锁的升级等基本概念和方法,同时对2PL协议与死锁的关系要求有明确的认知。2PL规定:读数据前加S锁,事务结束时释放;写数据前加X锁,事务结束时释放;当要修改数据时,事务应对自己所加的S锁升级为X锁。2PL解决的是事务并发时的正确调度,并不能解决死锁,死锁是由DBMS进行检测和解除的。

单项选择题
阅读理解与欣赏