![]() |
Sperren von Dateien: Deadlocks - Teergruben bei Dateisperren |
Das Sperren von Dateien kann jedoch auch zu Problemen führen, die vorher nicht aufgetreten sind. Das wichtigste Problem sind sogenannte Deadlocks. Dies tritt auf, wenn zwei Programme wechselseitig auf das Freiwerden einer jeweils anderen Dateisperre warten und damit für immer warten.
Folgendes Beispiel soll dies illustrieren:
Dieses Senzario lässt sich beliebig verkomplizieren, dass zum Beispiel 3 oder mehr Programme in einem Kreis auf die Sperren warten (1 wartet auf 2, 2 auf 3 und 3 wieder auf 1) oder dass es gar nicht um ganze Dateien, sondern nur um unterschiedliche Bereiche der gleichen Datei geht.
Zudem gibt es je nach Sperrmechanismus noch die Möglichkeit, dass ein Prozess eine Datei zweimal öffnet und dann versucht, zu sperren - beim zweiten Mal wartet er allerdings auf sich selbst.
Wenn der Code gut durchdacht und jedes Programm auf einander abgestimmt ist, dann treten Deadlocks nicht auf. Es gibt jedoch kein Patentrezept, um sie zu vermeiden, jedoch folgende nützlichen Tipps, die man beachten könnte:
LOCK_NB und ähnliche). Damit könnte man dann nur für eine bestimmte Zeit weiterhin versuchen, die Sperre aufzubauen und nach dieser Zeit eine andere Aktion durchführen (zum Beispiel abbrechen). Zu beachten ist hier, dass nichtblockierende Ein- und Ausgabe wesentlich komplizierter zu behandeln ist, als blockierende Ein- und Ausgabe.