Thread Mehrere Prozesse gleichzeitig auf eine Datei...
(16 answers)
Opened by Fatso Keratso at 2006-03-27 16:16
[quote=GwenDragon,27.03.2006, 14:20]Wenn Prozess A die Datei mit LOCK_EX gesperrt hat, kann Prozess B diese nicht öffnen, da sie exclusiv gesperrt ist.
Das open schlägt fehl.[/quote] Wenn ich das richtig sehe (und richtig getestet habe), sind Locks sowohl unter Linux 2.6.x als auch unter Windows XP advisory, wie auch als "traditionelles Verhalten" in der Manpage beschrieben. Sie hindern also andere Prozesse nicht am Überschreiben oder Löschen einer Datei. Das open() im zweiten (dritten, vierten, etc.) Prozess kümmert sich also überhaupt nicht um das Lock, aber das anschließende flock() kehrt erst dann zurück, wenn der erste Prozess das Lock entfernt. Fatso Keratso hat also auch recht mit seiner Vermutung, dass der zweite Prozess einfach "hängt", bis die Datei wieder freigegeben ist. Zum Testen einfach das folgende Progrämmchen zweimal (oder mehr) parallel in zwei Shells starten: Code: (dl
)
1 #!/usr/bin/perl Man kann gut verfolgen, wie der als zweites gestartete Prozess im flock() wartet, bis der erste die Datei schließt (und damit das Lock implizit freigibt). Ein zusätzliche Schicht mit Semaphoren halte ich für überflüssig. |