Thread Flock mit timeout (14 answers)
Opened by freddy at 2009-08-08 20:01

sid burn
 2009-08-08 21:36
#123975 #123975
User since
2006-03-29
1520 articles
BenutzerIn

user image
So wie es ausschaut hast du die Funktionsweise von flock() nicht richtig verstanden.

Wenn du flock() aufrufst dann wartet der Befehl solange bis es die datei locken kann. Wenn ein anderes Programm eine Stunde die Befehl lockt, dann würde der aufruf von flock() ebenfalls eine stunde dauern und dein programm würde solange stehen bleiben.

flock() liefert NICHT den Status zurück ob eine Datei gelockt wurde oder nicht. Sondern es wartet bis es die datei locken kann, lockt es und fährt dann fort. Daher ein normaler umgang damit schaut so aus:

Code (perl): (dl )
1
2
3
open my $fh, '<', $file or die $!;
flock($fh);
### tue etwas mit der datei


flock() wartet eben solange bis die datei gelockt werden konnte.


Wenn du nur maximal drei sekunden warten möchtest dann müsstest du beispielsweise ein ALARM Handler aufsetzen der nach drei sekunden mit die() abbricht, und dass du dann mit eval {} abfängst.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread Flock mit timeout