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.
Wait-morire e ferita-wait vengono prima proposti in http://dl.acm.org/citation.cfm?id=320260. –