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