Verklemmung
Eine Verklemmung ist ein Zustand, in dem ein Programm nicht auf eine benötigte Ressource zugreifen kann, um fortzufahren. Wenn eine aktive Anwendung in eine Verklemmung gerät, kann sie „hängen“ oder nicht mehr reagieren.
Ressourcen wie gespeicherte oder zwischengespeicherte Daten können gesperrt werden, wenn innerhalb eines Programms ein bestimmter Prozess darauf zugreift. Durch das Sperren der Daten wird verhindert, dass andere Prozesse die Daten vorzeitig überschreiben. Wenn ein Prozess oder eine Abfrage auf gesperrte Daten zugreifen muss, der Prozess, der die Daten sperrt, sie aber nicht freigibt, kann eine Verklemmung auftreten.
Das folgende Beispiel führt zu einer Verklemmung zwischen zwei Prozessen:
- Prozess 1 fordert Ressource B von Prozess 2 an.
- Ressource B ist gesperrt, während Prozess 2 ausgeführt wird.
- Prozess 2 benötigt Ressource A von Prozess 1, um seine Ausführung abzuschließen.
- Ressource A ist gesperrt, während Prozess 1 ausgeführt wird.
Das Ergebnis ist, dass Prozess 1 und Prozess 2 darauf warten, dass der jeweils andere Prozess fertig wird. Da keiner der beiden Prozesse fortfahren kann, bevor der andere abgeschlossen ist, entsteht eine Verklemmung.
Verklemmungen vermeiden
Entwickler können Verklemmungen verhindern, indem sie Sperrbedingungen in ihrer Programmlogik vermeiden. Statt beispielsweise zwei Prozesse voneinander abhängig zu machen, kann der Quellcode so geschrieben werden, dass jeder Thread beendet wird, bevor ein anderer Thread seine Ressourcen benötigt. Indem sichergestellt wird, dass Daten bei Bedarf zugänglich sind, können Programmierer ihre Anwendungen vor dem Hängenbleiben oder Abstürzen schützen.
NOTE: Verklemmungen können auch auftreten, wenn zwei oder mehr Abfragen in einer Datenbank ausgeführt werden. Transaktionsdatenbanken sperren aktive Datensätze, sodass andere Abfragen nicht darauf zugreifen können. Wenn ein Prozess nicht auf einen gesperrten Datensatz zugreifen kann, kann eine Verklemmung in der Datenbank auftreten.
Testen Sie Ihr Wissen