Christian Seiler: Blockingmode von flock()

Beitrag lesen

Hallo Tom,

Die() wird im Leben nicht ausgeführt, wenn die Datei schon mit LOCK_SH oder LOCK_EX oder auch mit einem dio_lock geöffnet ist.

Wenn ein anderes Programm das Lock hat: Nein, natürlich nicht, dafür brauche ich auch das die() nicht. (siehe mein anderes Posting)

Die übliche max_execution_time von 30 Sekunden ermittelt sich sicherlich wieder aus der verbrauchten Prozessorzeit des Skriptes.

Ja.

Da aber das flock() intern immer wieder auf ein "sleep" läuft, bevor es den nächsten Lockversuch vornimmt

Nein. Bei ALLEN Systemaufrufen legt sich der Prozess *GRUNDSÄTZLICH* schlafen - sleep() ist halt ein Systemaufruf, bei dem der Kernel auf X Sekunden wartet, flock() einer, bei dem der Kernel auf das Freiwerden der Sperre wartet, während read() ein Systemaufruf ist, bei dem der Kernel Daten holt (und evtl. auf diese wartet).

Ich habe es in einer halben STUNDE nicht erreicht, obwohl 30 Sekunden eingestellt sind.

Du wirst das Timeout NIE erreichen, weil solange flock() nicht zurückgekehrt ist, die Kontrolle NIE an den PHP-Prozess zurückgegeben wird - und damit der Zeitzähler NIE hochlaufen wird.

Viele Grüße,
Christian