Database Deadlock Prevention Wound-wait and wait-die

31 Views Asked by At

My problem is that when a transaction dies in either wound-wait or wait-die, I don't know when to restart it. Do I wait for the other transactions in the sequence to finish or only some of them ?. I would appreciate an answer to the question with explanation. Thanks (P.S. not homework)This is the question

My Idea:
X-> exclusive lock
S -> shared lock
w -> write
r -> read

Strict 2PL deadlock prevention , wait-die:
1. S(T1, x) , c(T1, x)
2. X(T2, y) , w(T2, y)
3. T2 killed , X(T2, y) released
4. X(T1, y) , w(T1, y)
5. T3 commits releasing X(T3, y) lock
6. X(T1, y) , w(T1, y)
7. T1 commits releasing S(T1, x) and x(T1, y) locks
8. X(T2, y) , w(T2, y)
9. X(T2, x) , w(T2, x)
10. T2 commits releasing X(T2, y) and X(T2, x) locks

Strict 2PL deadlock prevention , wound-wait:
1. S(T1, x) , r(T1, x)
2. X(T2, y) , w(T2, y)
3. T2 waits for X to be available
4. T3 waits for Y to be available
5. T1 dies , releasing S(T1, x)
6. X(T2, x) , w(T2, x)
7. T2 commits releasing x(T2, y) and x(T2, x) locks
8. X (T3, y) , w(T3, y)
9. T3 commits releasing X(T3, y)
10. S(T1, x) , r(T1, x)
11. x(T1, y) , w(T1, y)
12. T1 commits releasing S(T1, x) and X(T1, y)
0

There are 0 best solutions below