閱讀下列說(shuō)明,回答問(wèn)題1至問(wèn)題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
某銀行的存款業(yè)務(wù)分為如下三個(gè)過(guò)程:
(1)讀取當(dāng)前帳戶(hù)余額,記為R(b);
(2)當(dāng)前余額b加上新存入的金額x作為新的余額b,即b = b + x;
(3)將新余額b寫(xiě)入當(dāng)前帳戶(hù),記為W(b)。
存款業(yè)務(wù)分布于該銀行各營(yíng)業(yè)廳,并允許多個(gè)客戶(hù)同時(shí)向同一帳戶(hù)存款,針對(duì)這一需求,完成下述問(wèn)題。
【問(wèn)題1】(5分)
假設(shè)同時(shí)有兩個(gè)客戶(hù)向同一帳號(hào)發(fā)出存款請(qǐng)求,該程序會(huì)出現(xiàn)什么問(wèn)題?(100字以?xún)?nèi))
【問(wèn)題2】(5分)
存款業(yè)務(wù)的偽代碼程序?yàn)?R(b), b = b + x, W(b)。現(xiàn)引入共享鎖指令SLock(b)和獨(dú)占鎖指令XLock(b)對(duì)數(shù)據(jù)b進(jìn)行加鎖,解鎖指令Unlock(b)對(duì)數(shù)據(jù)b進(jìn)行解鎖。
請(qǐng)補(bǔ)充上述存款業(yè)務(wù)的偽代碼程序,使其滿(mǎn)足2PL協(xié)議。
【問(wèn)題3】(5分)
若用SQL語(yǔ)句編寫(xiě)的存款業(yè)務(wù)事務(wù)程序如下:
……
START TRANSACTION;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
UPDATE Accounts
SET CurrentBalance = CurrentBalance + Amount
WHERE AccountID = AccountNo;
COMMIT;
……
其中:Accounts為帳戶(hù)表,CurrentBalance為當(dāng)前余額,Amount為新存入的金額,AccountNo為外部輸入的帳戶(hù)編碼。
該事務(wù)程序能否正確實(shí)現(xiàn)并發(fā)的存款業(yè)務(wù)?如果不能,請(qǐng)說(shuō)明原因,應(yīng)做怎樣的修改?(100字以?xún)?nèi))