Originariamente inviato da Beavey
Ciao,
Il deadlock avviene quando si forma un ciclo di attesa tra le varie transazioni che cercano di usare le stesse risorse. Questo pero' dipende dal tipo di restrizioni imposte dal gestore delle transazioni. Se il sistema che devi analizzare fa uso del concetto "two phase locking" questo significa che le seguenti regole vengono applicate:
Ogni transazione mantiene tutti i propri LOCK sulle varie risorse finche non esegue l'istruzione COMMIT.
Le regole dei lock sono le seguenti (basate su 2 transazioni T1, T2 e una risorsa A):
1. Risorsa A non ha Lock: T1, T2 possono richiedere un Read Lock (RL) o Write Lock(WL), senza attesa
2. T1 possiede un R lock su risorsa A: T2 puo' richiedere un R Lock ma deve aspettare prima di ricevere un W Lock
3. T1 possiede W lock su risorsa A: T2 deve aspettare che T1 finisce prima di poter richiedere un R, W lock.
Il deadlock avviene quando T1 e' in attesa che T2 rilasci i propri lock, e allo stesso tempo, T2 e' in attesa che T1 rilasci i propri lock. In questo caso nessuna delle 2 transazioni puo' concludere visto che c'e' un ciclo di attesa tra di loro. Un esempio pratico:
T1: RL(A) (T1 possiede read lock su risorsa A)
T2: RL(B)
T1: WL(B) (a questo punto, T1 deve aspettare che T2 esegua il COMMIT visto che T2 possiede un Read Lock su risorsa B)
T2: WL(A) (T2 richiede Write Lock su risorsa A, ma T1 possiede un Read Lock, percio' T2 deve aspettare che T1 esegua il COMMIT prima di poter procedere)
Il deadlock accade quando T2 richiede WL(A): T1 aspetta per T2 ma T2 non puo procedere perche aspetta per T1, questo e' un ciclo.
Ti consiglio di cercare un po' di esempi su "wait-for-graphs", "transaction deadlock" e "resource allocation graphs".
Riguardo alla situazione che hai postato, non capisco la differenza tra i rettangoli grigi e quelli neri? Cosa rappresentano le frecce rivolte verso le transazioni (possesso di un Write lock?) e quelle rivolte verso le risorse?
Spero di essere stato d'aiuto!