Hello,
Sehe ich auch so. Nur sollte Prozess a die Datei, wenn er sie erzeugt bzw. schreibt, auf jeden Fall gegen andere Zugriffe sperren. In der Phase ist eventuell sogar eine Sperre gegen ein weiteres Öffnen zum Lesen sinnvoll, denn Prozess b (c, d, e ...) würde ja dann unvollständige und dadurch möglicherweise ungültige Daten lesen.
Übliche Locking-Mechanismen arbeiten immer so, dass es zwei Stufen der Sperre gibt:
-
shared lock: der eigene Pozess kann nur lesen, andere können lesen
und ebenfalls shared locks setzen auf die Datei -
exclusive lock: der eigene Prozess kann lesen und schreiben, andere können weder lesen,
noch schreiben, noch locks setzen.
Wenn ein Prozess vor hat, Daten zu verändern, muss er die exclusive Sperre bereits zum Lesen setzen, um keine Gültigkeitslücke entstehen zu lassen.
In verbindungsorentierten Systemen werden Datei- und Datensatzsperren i.d.R. automatisch aufgehoben, wennn das _Handle_ auf die Datei ungültig wird, also der Prozess endet oder stirbt.
Da es mWn heutzutage keine Filesysteme mehr gibt, die noch mit FCBs (File Control Blocks) arbeiten, sollte das allgemeingültig sein. Windows hat das allerdings bei FAT lange Zeit noch gemacht für das Umbenennen von Verzeichnissen. Wenn da mal zum passenden Zeitpunkt das System abgestürzt ist, hatte man schon mal zwei Verzeichnisse mit demselben Namen. Das ließ sich mWn mit den Bordmitteln nicht wieder beseitigen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg