Andres Freund: flock() auch beachten

Beitrag lesen

Hi,

In SELFHTML steht nun aber, das es sich auch andere Prozesse an das flock halten müssen, damit es Sinn hat. Meine Frage nun, wie bring ich meinem Script bei, das es sich daran halten soll, und erst dann eine Datei öffnet, wenn diese wieder freigegeben wurde. Tut Perl das automatisch, oder muß ich extra sagen: "Warte bis wieder frei ist, und dann mache das und das..."?

Am besten machst du es so, wenn du eine Datei einlesen willst, setzt du einen shared_lock, so dass währenddessen gelesen werden kann. Wenn du aber schreiben willst, setzt du einen exklusiven lock, so das niemand währenddessen lesen kann, es könnte ja erst ein Teil der Daten geschrieben worden sein, so dass das Ergebnis schwachsinn ist. Natürlich kann während eines exklusiven locks auch nicht geschrieben werden.
Allerdings solltest du umbedingt darauf achten, die Locks so kurz wie möglich zu halten, dh. die Datei öffnen, etwas schreiben/lesen, die Datei wieder schließen, und nicht währenddessen noch dein halbes Script ablaufen lassen, da sonst ein parralel laufendes Script auf den Lock warten muss.

Grüße Andres Freund

--
ss:) zu:) ls:} fo:) de:] va:) ch:| n4:& rl:° br:^ js:( ie:% fl:( mo:|