Was ist ein Deadlock in der Informatik?
Kann mir jemand erklären, was ein Deadlock ist, und wie es zu diesem kommen kann? Wie könnte ich einen solchen Deadlock unter Windows oder Mac beheben?
6 Antworten
Ein Prozess befindet sich "im deadlock", wenn er im Zuge seiner Abarbeiting von Code in eine Schleife geraten ist, die er nicht mehr verlassen kann, da ein und derselbe Zustand immer wieder auftritt.
Deadlocks sind Folge von Programmierfehlern
- Eine Endlosschleife ist kein Deadlock
- Ein Deadlock muss keine Endlosschleife sein. Es gibt andere Möglichkeiten auf Ressourcen zu warten als ein Spinlock.
- Das Ganze muss kein Programmierfehler sein. Du kannst dich auch aus Performancegründen dazu entschließen, Deadlocks zu ignorieren, und im Falle, dass doch einer auftritt eben einen Prozess killen.
Max und Moritz wollen Kuchen essen. Dafür brauchen sie jeweils ein Stück Kuchen und Besteck. Leider gibt es nur ein Messer und eine Gabel. Ein Stück Kuchen haben sie beide auf dem Teller, Max hat die Gabel und Moritz hat das Messer. Max wartet jetzt darauf dass Moritz mit Essen fertig wird, um dann das Messer nutzen zu können. Moritz wartet darauf, dass Max mit Essen fertig wird, um die Gabel nutzen zu können.
Visualisierung: https://external-preview.redd.it/fkevnztVx_7Bk77ZtdcU4otjNTBD9aGcxLFhgYlzE0I.jpg?auto=webp&s=73a1309389dab0467a83b7b26848ce13403f9054
Ein Deadlock ist eine Situation, wo sich zwei
oder mehr Programm(teil)e gegenseitig blockieren,
so dass keiner von beiden mehr weiter kommt.
Aber dann muss man die doch crashen, oder nicht? Weil sonst hängt sich doch das System auf und man kommt nicht weiter?
Das System hängt sich nur dann auf, wenn es aus welchem Grund auch immer auf das Programm wartet. Sollte eigentlich nicht passieren.
Nein. Einfache Situation: Zwei gleichzeitig laufende
Programmteile, sog. Threads, brauchen beide die Dateien
A und B. Der erste Thread blockert A, der zweite B.
Jetzt will der erste noch B haben, bekommt es aber nicht,
weil es vom zweiten blockiert ist. Der zweite will noch A
haben, bekommt es aber aus demselben Grund nicht. Da beide
A und B brauchen, warten sie, bis die jeweilige Datei frei wird.
Das wird sie aber nie, so dass sie bis in alle Ewigkeit warten.
Unter einem Deadlock/ einer Verklemmung versteht man in der Informatik einen Zustand, bei dem eine zyklische Wartesituation zwischen mehreren Prozessen auftritt, wobei jeder beteiligte Prozess auf die Freigabe von Betriebsmitteln wartet, die ein anderer beteiligter Prozess bereits exklusiv belegt hat.
Mit Monitoren können Verklemmungen vorbeugend verhindert werden. Damit lassen sich geschützte Programmabschnitte definieren, die immer nur von einem Prozess gleichzeitig ausgeführt werden dürfen.
Deadlocks kommen bei Programmierfehlern vor und sind so etwas wie eine Endlosschleife, weil der eine Befehl [B2] auf den anderen [B1] wartet und dieser [B1] wartet auf den ersten [B2], und so weiter...
Das stimmt so nicht. https://de.wikipedia.org/wiki/Deadlock_%28Informatik%29