閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對應(yīng)欄內(nèi)。
【說明】
某停車場有多個入口和出口,車輛進入時從入口處由系統(tǒng)查詢可用的停車位,從出口駛出時系統(tǒng)將其剛使用的車位標記為空車位。
根據(jù)上述描述,在入口處的偽代碼程序為:
x = Get();
IF x =NULL THEN return 0;
Writ(x, 1);
【問題1】(3)
若兩輛車在不同的入口處同時執(zhí)行上述代碼,會出現(xiàn)什么問題?(100字以內(nèi)描述)
【問題2】(8分)
為保證入口處偽代碼正確地并發(fā)執(zhí)行,引入共享鎖指令 SLock(T)和獨占鎖指令XLock(T)對表 T 進行加鎖;Upgrade(T)對表 T 所加的共享鎖升級為獨占鎖;解鎖指令Unlock(T)對表T 進行解鎖。
(1)請修改上述入口處的偽代碼程序,使其滿足2PL協(xié)議。
(2)滿足2PL協(xié)議的入口處的偽代碼程序,在并發(fā)執(zhí)行時是否會產(chǎn)生死鎖?若是,給出一個產(chǎn)生死鎖的調(diào)度。
【問題3】(4分)
若停車位表的關(guān)系模式為:park(parkno, isused),其中parkno為停車位號,isused為停車位標志,0為空,1為非空。
下面是用E-SQL實現(xiàn)的查詢空車位的函數(shù)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