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

Beitrag lesen

Hi Tom!

fopen(..
flock(.. 2)
Hier zwischen können andere Prozesse auf die Datei aber noch zugreifen (z.B. könnten 2 Apache-Prozesse denselben Wert aus einer Counter-Datei auslesen). Ist zwar sehr unwahrscheinlich, aber möglich.

Ist sogar sehr wahrscheinlich bei hoher Besucherfrequenz...

Ja, auf lange Sicht sicherlich.

Außerdem muss der gesamt Update-Prozess durch ein Exclusive-Lock geschirmt werden, dann kann sowas nicht passieren.

Was aber in PHP nicht ganz so einfach ist, oder? Was meinst Du jetzt mit "Update-Prozess"? Doch die "Prozedur" des Aktualisierens selber, oder?

Mal angenommen Du wolltest eine Funktion schreiben, die wie ein Counter steigende Nummern zurückgibt, meinetwegen:

$next_id = get_next_id();

Die Id soll wie bei MySQLs Auto-Increment bei jedem Aufruf immer um 1 erhöht werden. Das Script mit der Funktion wird von verschiedenen Apache-Prozessen konkurrierend aufgerufen.

Wie würdest Du das jetzt implementieren, das heißt sicherstellen dass es keine doppelten IDs gibt (was ja passiert wenn die Datei mit der aktuellen ID von einem 2. Prozessen zw. fopen() und flock() aufgerufen wird )?

Eine externe Lock-Datei hat IMHO gerade bei besonders vielen Zugriffen den Nachteil, dass es zu einem Dead-Lock kommen kann, falls ein Prozess stirbt...
Ist sowas mit PHP über eine Datei überhaupt möglich?

Grüße
Andreas

--
SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/