Andreas Korthaus: file-locking um konkurrierende Datei-Zugriffe zu regeln?

Beitrag lesen

Hallo Andreas!

hoffe ich auch ,-) Das hat mich erstmal erschlagen. Deshalb auch keine Reaktion bis jetzt.

Sorry wenn ich Dich jetzt etwas verwirrt habe. Das Problem mit einer eindeutigen ID(Counter) ist was recht spezielles, weil sich AFAIK nicht mit einem handle die letzte ID aus einer Datei lesen lässt, und sofort mit der neuen überschreiben. Es hat wahrscheinlich nicht viel mit Deinem Problem zu tun.
Das heißt man muss mitten im Update-Prozess den LOCK lösen, was zu Inkonsistenzen führen kann.
Im Normalfall - solange Du sicher stellst dass alle Scripte die auf die Datei zugreifen eben diesen flock() Mechanismus verwenden, hast Du kein Problem.
Ich weiß nicht genau was Du vorhast, solange Du _nur_ liest oder _nur_ schreibst ist das eben kein Problem, nur wenn man beides "atomar" kombinieren musst, wie beim Counter.

In meinem Posting unten([pref:t=82711&m=484392]) habe ich eine Lösung für diesen Fall gepostet, und zwar indem man so einen Update-Prozess mit lesen und schreiben (wie beim Counter) mit einem LOCK auf eine externe Datei umschließt. Denn solange die externe Datei gesperrt ist, bekommen andere Prozesse/Scripte(die denselben Mechanismus verwenden) keinen Zugriff auf eben diese Datei und warten an dieser Stelle, und kommen erst zur eigentlichen Update-Operation wenn der vorherige Prozess mit dem Update fertig ist und hinterher den LOCK von der externen Datei entfernt hat.

Aber wie gesagt, wenn Du sowieso nur ein Handle brauchst, dann mach es so wie es im Manual steht und Du hast kein Problem.

Ich brauch noch Zeit zum Probieren. Aber eins verstehe ich nicht: Auch in der Doku steht was, daß die Prozesse die gleichen Regeln beachten müssen oder so. Wie stelle ich das denn fest? Also bei mir greifen nicht verschiedene Programme auf eine Datei zu, sondern das eine Script eben von verschiedenen Clients angefordert.

Ja, das reicht schon. Die Scripte werden z.B. von verschiedenen Apache-Prozessen ausgeführt, auch dieses eine Scripte kann mehr oder wenige gleichzeitig von mehreren Apache-Prozessen ausgeführt werden. Aber da in diesem Fall ja alle den Code mit flock() verwenden, wird es zuverlässig funktionieren. Du könntest die Datei auch in anderen Scripten verwenden, aber musst dann auch entsprechend mit flock() arbeiten, wenn das Locking zuverlässig funktionieren soll.

Sorry nochmal fürs Verwirren ;-)

Grüße
Andreas

--
SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/