Beat: Dateienverriegelung

Beitrag lesen

for ($i=0; !($fh=@fopen($fn, 'a')) && $i<10; $i++)
        {
            usleep(100);
        }

  1. Wie finde ich heraus, ob die Sperre tatsächlich gesetzt wurde?

Indem du eben versuchst, eine Sperre zu erhalten.
Ich sehe deshalb nicht, wie dieses Script Race-Conditions aufheben kann.

Ich sehe ein Problem auch bei usleep(100).
sleep wacht auf UNIX bestenfalls alle 1000 us auf. Bei WinXP sogar nur alle 64tel Sekunden. Ist der Wert von usleep unter einem bestimmten Grenzwert, hat das den gleichen Effekt wie usleep(0).

Nun hat usleep den netten Effekt, dass es dem Kernel erlaubt, CPU an den nächsten Prozess zu geben. Das erhöht eher noch die Gefahr von Race-Conditions.

mfg Beat

--
><o(((°>           ><o(((°>
   <°)))o><                     ><o(((°>o
Der Valigator leibt diese Fische