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: