2015-09-26 18 views
19

Qual è la differenza tra wait-die e wound-wait?Qual è la differenza tra wait-die e wound-wait?

ho trovato che entrambe le tecniche di prevenzione del deadlock stanno facendo la stessa cosa (processo di rollback dei vecchi).

può qualsiasi corpo spiegarmi, qual è la differenza tra loro con un esempio adatto.

risposta

38

Schema di attesa-matrice: È una tecnica non preventiva per la prevenzione di deadlock. Quando la transazione Ti richiede un elemento di dati attualmente detenuto da Tj, Ti può aspettare solo se ha un timestamp più piccolo di quello di Tj (cioè Ti è più vecchio di Tj), altrimenti Ti viene ripristinato (muore).

In questo schema, se un richieste di transazione per bloccare una risorsa (voce dei dati), che è già tenuto con un lock in conflitto con un'altra transazione, allora si può verificare una delle due possibilità -

(1) Se TS (Ti) < TS (Tj) - cioè Ti, che richiede un blocco in conflitto, è precedente a Tj - allora a Ti è consentito attendere fino a quando l'elemento di dati è disponibile.

(2) Se TS (Ti)> TS (tj) - cioè Ti è più giovane di Tj - allora Ti muore. Ti viene riavviato più tardi con un ritardo casuale ma con lo stesso timestamp.

Questo schema consente alla transazione meno recente di attendere ma uccide quella più giovane.

Ad esempio:

Supponiamo che T22 transazione, T23, T24 hanno timestamp 5, rispettivamente 10 e 15. Se T22 richiede un elemento dati trattenuto da T23, T22 attenderà. Se T24 richiede un elemento dati detenuto da T23, verrà eseguito il rollback di T24.

Schema di attesa della ferita: È una tecnica preventiva per la prevenzione di deadlock. È una contropartita dello schema wait-die. Quando Transaction Ti richiede un elemento di dati attualmente detenuto da Tj, Ti può aspettare solo se ha un timestamp più grande di quello di Tj, altrimenti Tj viene tirato indietro (Tj viene ferito da Ti).

In questo schema, se un richieste di transazione per bloccare una risorsa (voce dei dati), che è già tenuto con blocco in conflitto da parte di alcuni un'altra transazione, può verificarsi una delle due possibilità -

(1) Se TS (Ti) < TS (Tj), allora Ti forza Tj a essere tirato indietro, cioè Ti ferisce Tj. Tj viene riavviato più tardi con un ritardo casuale ma con lo stesso timestamp.

(2) Se TS (Ti)> TS (Tj), quindi Ti è costretto ad attendere fino a quando la risorsa è disponibile.

Questo schema consente alla transazione più giovane di attendere; ma quando una transazione precedente richiede un elemento tenuto da uno più giovane, la transazione più vecchia costringe il più giovane ad abortire e rilasciare l'oggetto.

Ad esempio:

Supponiamo che Transazioni T22, T23, T24 hanno timestamp 5, rispettivamente 10 e 15.Se T22 richiede un elemento di dati detenuto da T23, l'elemento di dati verrà annullato da T23 e T23 verrà annullato. Se T24 richiede un elemento dati detenuto da T23, T24 attenderà.

In entrambi i casi, la transazione che entra nel sistema in una fase successiva viene interrotta.

+1

Wait-morire e ferita-wait vengono prima proposti in http://dl.acm.org/citation.cfm?id=320260. –

4

Parth ha fornito una risposta dettagliata. Qui lo riassumo in un modo diverso.

Si supponga che Ti richieda un blocco tenuto da Tj. La tabella seguente riassume le azioni intraprese per lo schema di attesa-die e ferita-wait:

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

Entrambi gli schemi preferiscono le transazioni più anziani con un timestamp più vecchio.

+0

Ottima risposta, ma è 'die' come abortire/rollback? –

+1

@ P_95 Sì, 'die' è lo stesso di abort/rollback. –

0

In entrambi i casi, il vecchio è sempre un campione, sopravviverà. La differenza è dal punto di vista delle transazioni più giovani.

Se il più giovane richiede una risorsa detenuta da un vecchio trans. , in attesa/morte, può aspettare di dare il rispetto come Vecchio. Se uno dei più giovani richiede una risorsa posseduta da un vecchio trans., nella ferita/morte, sarà costretto a tornare indietro come Vecchia.

In entrambi gli schemi il vecchio non è mai in perdita.

consultare: https://www.tutorialspoint.com/dbms/dbms_deadlock.htm