Moin,
angeregt durch einen Thread weiter unten, hab ich mich mal wieder mit flock() befasst, speziell mit dem Parameter NB was für Non Blocking steht. Um das Verhalten zu testen, verwende ich fork(), womit zwei Prozesse entstehen die zeitlich aufeinandertreffen. Jeder Prozess liest eine Zahl aus einer Datei, erhöht diese Zahl um eins und schreibt die Zahl zurück in die Datei. Schauen wir uns das Ergebnis an:
-
flock($FH, LOCK_EX);
Parent- und Childprozess bekommen jeweils eine fortlaufende und eindeutige Nummer (z.B. Parent: 1492, Child: 1493), dieses Verhalten ist für den Regelbetrieb auch so beabsichtigt. -
Die Datei wird nicht gelockt: Beide Prozesse erhalten einunddieselbe Nummer, typisch für eine Racecondition und so nicht erwünscht.
-
flock($FH, LOCK_EX|LOCK_NB);
Einer der beiden Prozesse, meistens ist das der Childprozess, manchmal aber auch der Parent, erhält keine fortlaufende Nummer (undef).
Nun frage ich mich, für was LOCK_NB gut sein soll. Hat mal jemand ein praktisches Beispiel für eine sinnvolle Verwendung für Non Blocking Lock?
Schöne Grüße.