2015-09-26 1186 views

回答

38

等死模式:這是一種非搶先式的預防死鎖技術。當事務Ti請求當前由Tj存儲的數據項時,只有當Ti具有比Tj小的時間戳(即Ti比Tj更早)時才允許Ti等待,否則Ti被回滾(死亡)。

在該方案中,如果事務請求鎖定資源(數據項),這是由另一個事務與衝突鎖已經保持,然後的兩種可能性之一可能發生 -

(1)如果TS(Ti)< TS(Tj) - 即請求衝突鎖的Ti比Tj早 - 則允許Ti等待,直到數據項可用。如果TS(Ti)> TS(tj) - 即Ti比Tj年輕 - 則Ti死亡。 Ti稍後以隨機延遲重啓,但具有相同的時間戳。

該方案允許舊的交易等待,但殺死年輕的交易。

例如:

假設交易T22,T23,T24有時間標記5,分別爲10和15。如果T22請求T23保存的數據項,則T22將等待。如果T24請求T23保存的數據項,則T24將被回滾。

傷口等待方案:這是一種預防死鎖的技術。這是等待死亡計劃的一個對等物。當事務Ti請求當前由Tj持有的數據項時,只有當Ti具有大於Tj的時間戳時,才允許Ti等待,否則Tj被回滾(Tj受Ti影響)。

在該方案中,如果事務請求鎖定資源(數據項),這是由一些用衝突鎖已持有另一事務中的兩種可能性之一可能發生 -

(1)如果TS(Tj),那麼Ti迫使Tj被回滾 - 即Ti纏繞Tj。 Tj稍後以隨機延遲重啓,但具有相同的時間戳。如果TS(Ti)> TS(Tj),則Ti被迫等待,直到資源可用爲止。如果TS(Ti)> TS(Tj)

這個方案,允許年輕的交易等待;但是當較舊的交易請求較年輕的交易時,較舊的交易強制較年輕的交易放棄並釋放該項目。

例如:

假設交易T22,T23,T24有時間標記5,分別爲10和15。如果T22請求T23保存的數據項,則數據項將從T23被搶佔,並且T23將被回滾。如果T24請求T23保存的數據項,則T24將等待。

在這兩種情況下,中止在後期進入系統的事務。

+1

等待死亡,傷口等待在http://dl.acm.org/citation.cfm?id=320260首次提出。 –

4

Parth給出了詳細的答案。這裏我用不同的方式總結它。

假設Ti請求由Tj持有的鎖。下表總結了採取觀望模具和傷口等待方案的行動:

      wait-die   wound-wait 
Ti is younger than Tj  Ti dies   Ti waits 
Ti is older than Tj  Ti waits   Tj aborts 

這兩種方案都喜歡舊的交易與舊的時間戳。

+0

很好的答案,但是與死亡/回滾相同嗎? –

+1

@ P_95是的,'die'和abort/rollback是一樣的。 –

0

在這兩種情況下,老總是冠軍即將生存。區別在於年輕的交易觀點。

如果年輕人正在請求一箇舊版本所持有的資源。在等待/死亡時,他可以等待,如同老式的轉變一樣。如果年輕的一方要求舊式轉化所持有的資源,那麼在傷口/死亡時他會被迫作爲老式轉化。

在這兩個計劃中,老是永遠不會丟失。

參見:https://www.tutorialspoint.com/dbms/dbms_deadlock.htm