银符考试题库B12
现在是:
试卷总分:75.0
您的得分:
考试时间为:
点击“开始答卷”进行答题
试题五
阅读下列说明,回答问题1至问题3,将解答填入的对应栏内。
[说明]
    某停车场有多个入口和出口,车辆进入时从入口处由系统查询可用的停车位,从出口驶出时系统将其刚使用的车位标记为空车位。
    假设实现停车场管理的伪指令如下表1所示:
   
    根据上述描述,在入口处的伪代码程序为:
    x=Get();
    IF x=NULL THEN return 0;
    Writ(x,1);
1.  [问题1]
    若两辆车在不同的入口处同时执行上述代码,会出现什么问题? (100字以内描述)
  
若两辆车在不同的入口处同时执行代码,可能造成两辆车争用同一停车位。即两车同时申请到一个停车位,并置为占用状态。
[解析] 本题考查并发控制的概念和应用,属于比较传统的题目,考查点也与往年类似。
   [问题1]考查对并发情况下,会产生数据的不一致性问题,要求结合理论知识与实际问题,找出问题所在。两车同时读空车位时,可能会读到同一空车位,进而占用造成突,与并发控制中的丢失修改错误相类似。
 
2.  [问题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进行检测和解除的。
 
3.  [问题3]
    若停车位表的关系模式为:park(parkno,isused),其中parkno为停车位号,isused为停车位标志,0为空,1为非空。
    下面是用E-SQL实现的查询空车位的函数Get(),请补全空缺处的代码。
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
        EXEC SQL DECLARE getblk CURSOR FOR
                (a) 
        EXEC SQL OPEN getblk;
        EXEC SQL FETCH getblk INTO:Hparkno;//Hparkno为已声明的主变量
        IF SQLCA.sqlcode=100 THEN
        EXEC SQL CLOSE getblk;  Return NULL;
        ELSE
                (b) 
        END IF
  
(a)SELECT parkno
   FROM park
   WHERE isused=0;
   (b)EXEC SQL CLOSE getblk;
   Return:Hparkno;
[解析] [问题3]考查对2PL协议理论与SQL中的隔离级别,以及嵌入式SQL的编程实践。
   空缺(a)要补充的是游标定义中的查询部分;空缺(b)要补充的是关闭游标和函数返回值部分。
 
隐藏
试题一
12
试题二
123
试题三
123
试题四
123
试题五
123

  深色:已答题  浅色:未答题