[問題] 102 高考三等 資料庫問題
Tr1和Tr2是兩個交易,某次執行程序如下:假設x和y在硬碟的初始值為 x=1000 y=1000。
Time| Tr 1| Tr2
______________________
t1 | read X |
t2 | read Y
t3 | X=X-1000 |
t4 | | read X
t5 | write X |
t6 | | Y=Y+1000
t7 | | write Y
Q1 若兩交易以2PL執行,請問系統如何進行?
我的想法是用2PL的保守法,針對要用的資源先全部鎖定,用完後再一次釋放,故我先讓
Tr2先使用資源並全數鎖定X、Y,解鎖後再讓Tr1使用資源
Tr1 Tr2
-- -------------------------------
鎖定期 Luck_read(y)
Luck_read(X)
Luck_write(Y)
read Y
------------------------------------
解鎖期 Y=X+1000
Unluck_write(Y)
write Y
Unluck_read(Y)
Unluck_read(X)
------------------------------------
鎖定期 Luck_read(X)
Luck_write(X)
------------------------------------
X=X-1000
解鎖期
write X
Unluck_write(X)
Unluck_read(X)
請問可否這樣解?
Q2.若使用time-stamp執行,且Tr在Tr2之後才進來,說明執行結果
設 Tr1 起始時間200 Tr1起始時間100
且分別設定write/read的起始時間分別為 W_max=90 R_max=90
Time| Tr1 | Tr2
______________________
t1 | read X | // Tr1(200)>= R_max(90) , R_max=200
t2 | read Y //Tr2(100)<=R_max(200) , Tr2重跑 得到新的時間300
t3 | X=X-1000 |
t4 | | read X // Tr2(300)>=R_max(200) , R_max=300
t5 | write X | //Tr1(200)< R_max(300) ,Tr1(200)> W_max(90),但 Tr1仍
//需重跑 得到新的時間400
t6 | | Y=Y+1000
t7 | | write Y //Tr2(300)>=R_max(200) 且 Tr2(300)>W_max(90)
但參考了高點的解答,為何說該兩交易之排成可順利完成
請版上高手綁我檢視我的想法有沒有問題?或有那裡考慮的不周全?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.135.121
※ 文章網址: https://www.ptt.cc/bbs/Examination/M.1430664435.A.0AB.html
→
05/04 07:21, , 1F
05/04 07:21, 1F
→
05/04 07:22, , 2F
05/04 07:22, 2F
→
05/04 07:23, , 3F
05/04 07:23, 3F
→
05/04 07:29, , 4F
05/04 07:29, 4F
→
05/04 07:33, , 5F
05/04 07:33, 5F
→
05/04 07:34, , 6F
05/04 07:34, 6F
→
05/04 07:35, , 7F
05/04 07:35, 7F
推
05/04 10:31, , 8F
05/04 10:31, 8F
→
05/04 11:23, , 9F
05/04 11:23, 9F
→
05/04 14:33, , 10F
05/04 14:33, 10F
→
05/04 14:34, , 11F
05/04 14:34, 11F
→
05/04 14:34, , 12F
05/04 14:34, 12F
→
05/04 14:35, , 13F
05/04 14:35, 13F
推
05/05 16:23, , 14F
05/05 16:23, 14F
→
05/05 16:24, , 15F
05/05 16:24, 15F
→
05/05 16:24, , 16F
05/05 16:24, 16F
→
05/05 16:25, , 17F
05/05 16:25, 17F
→
05/05 21:11, , 18F
05/05 21:11, 18F
→
05/05 21:12, , 19F
05/05 21:12, 19F
推
05/06 08:11, , 20F
05/06 08:11, 20F