Deadlock

Ein Deadlock ist ein Zustand, in dem ein Programm nicht auf eine Ressource zugreifen kann, die es zur Fortsetzung benötigt. Wenn eine aktive Anwendung auf einen Deadlock trifft, kann sie "hängen" oder nicht mehr reagieren.

Ressourcen, wie z. B. gespeicherte oder im Cache gespeicherte Daten, können gesperrt werden, wenn ein bestimmter Prozess innerhalb eines Programms auf sie 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.

Zum Beispiel verursacht die folgende Situation eine Deadlock zwischen zwei Prozessen:

  • Prozess 1 fordert Ressource B von Prozess 2 an.
  • Ressource B ist gesperrt, während Prozess 2 läuft.
  • Prozess 2 fordert Ressource A von Prozess 1 an, um die Ausführung zu beenden.
  • Ressource A ist blockiert, während Prozess 1 läuft.

Das Ergebnis ist, dass Prozess 1 und Prozess 2 darauf warten, dass der andere Prozess beendet wird. Da keiner der beiden Prozesse fortfahren kann, bis der andere abgeschlossen ist, entsteht eine Deadlock.

Vermeidung von Deadlocks

Entwickler können Deadlocks verhindern, indem sie Sperrbedingungen in ihrer Programmierlogik vermeiden. Anstatt dass beispielsweise zwei Prozesse aufeinander angewiesen sind, 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.

Hinweis: Deadlocks können auch auftreten, wenn zwei oder mehr Abfragen auf einer Datenbank ausgeführt werden. Transaktionale Datenbanken sperren aktive Datensätze und verhindern so, dass andere Abfragen auf sie zugreifen können. Wenn ein Prozess nicht auf einen gesperrten Datensatz zugreifen kann, kann es zu einem Datenbank-Deadlock kommen.

Stand: 08.10.2020