Ein schwerwiegendes Problem bei sperrbasierten Synchronisationsmethoden ist das Auftreten von Verklemmungen (englisch: deadlocks). Tabelle 13.12 zeigt ein Beispiel.
Schritt | ![]() |
![]() |
Bemerkung |
1. | BOT | ||
2. | lockX(![]() |
||
3. | BOT | ||
4. | lockS(![]() |
||
5. | read(![]() |
||
6. | read(![]() |
||
7. | write(![]() |
||
8. | lockX(![]() |
![]() ![]() |
|
9. | lockS(![]() |
![]() ![]() |
|
10. | ... | ... |
![]() |
Eine präzise, aber auch teurere - Methode zum Erkennen von Verklemmungen basiert
auf dem sogenannten . Seine Knoten entsprechen den Transaktionen.
Eine Kante existiert von
nach
, wenn
auf die Freigabe einer
Sperre von
wartet. Abbildung 13.4
zeigt ein Beispiel.
Es gilt der Satz: Die Transaktionen befinden sich in einem Deadlock genau dann, wenn der Wartegraph einen Zyklus aufweist.
Eine Verklemmung wird durch das Zurücksetzen einer Transaktion aufgelöst: