[問題] 102 高考三等 資料庫問題

看板 Examination
作者 eevvaag (Len)
時間 2015-05-03 22:47:12
留言 20則留言 (3推 0噓 17→)

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

malowda: Q1你這樣做是不對的因為READLOCK是共享鎖所以TR1也使用了 05/04 07:21

malowda: x但無法升級為WRITELOCK(X)必須等Y放掉所以不是TR2整個 05/04 07:22

malowda: 做完TR1才去LOCK X 05/04 07:23

malowda: Q2在READ Y你就做錯了把READ X的TS拿來和Y的TS比 05/04 07:29

malowda: T4只要比w_max是否>TR2的TS以這是TR2>W_MAX所以TR2可以 05/04 07:33

malowda: READ X TR1會比R_MAX=TR1的TS和W_MAX<TR1的TS所以TR1可以 05/04 07:34

malowda: write x之後Y可以做完 05/04 07:35

fcouple: m大正解,都被你講完了,我回去讀書囉。 05/04 10:31

APE36: 個人覺得,這種解因該是個人認知的解法,補習班不會這樣教 05/04 11:23

panda555: 你第一題答非所問 人家是要你用2PL做 沒叫你改排程 05/04 14:33

panda555: 改序列排程 根本就不用甚麼2PL跟time stamp 05/04 14:34

panda555: 第2題 如m大所說 你T2就錯了 05/04 14:34

panda555: timestamp的定義要再複習一下喔 05/04 14:35

gunhello: m大所說的[必須等y放掉],我不太理解,我大膽的推敲,應該 05/05 16:23

gunhello: 是[把READ_LOCK(X) UNLOCK後,才能WRITE_LOCK(X),是否 05/05 16:24

gunhello: 正確?請幫我解答,感謝各位大大。 05/05 16:24

gunhello: 我的意思是[把TR2的READ_LOCK(X) UNLOCK。^^ 05/05 16:25

panda555: 樓上你答對了 應該是說 等Y做完 開始收縮階段 05/05 21:11

panda555: Tr2收縮階段再把X unlock掉 TR1就可以write lock x囉 05/05 21:12

gunhello: 謝謝囉,我想應該是大家解釋上的謬誤,感謝您。 05/06 08:11

您可能感興趣