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() | muß warten auf | |
9. | lockS() | muß warten auf | |
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: