Thread flock funktioniert nicht
(64 answers)
Opened by x-man at 2006-04-17 19:11
@pq
Ganz einfach... Bin mir nicht ganz sicher aber denke die Datei wird gelöscht und dann neu erzeugt. Bei sysopen ist das jedenfalls nicht so. Prozess 1: Hat gerade den Befehl open() ausgeführt. Prozess 2: Öffnet nun im dümmsten moment die (ungeflockte-)Datei ebenfalls, weil der Prozess 1 noch nicht zum befehl "flock" kam. Nun kommt Prozess 1 zum Befehl "flock" und sichert die datei für sich. Das Problem ist das Multitasking. Wenn du nur 1 Prozess startest, passiert nichts. Schreibst du aber z.B. einen counter oder irgendwas anderes bei dem Mehrere Prozesse auf die selbe Datei zugreiffen wirds gefährlich, besonders wenn 2 (fast)gleichzeitig darauf zugreiffen.... Durch das multitasking bekommt nun also Prozess 1 und 2 die CPU-Zeit aufgeteilt. Nach einigen millisekunden bekommt dann Prozess 2 die CPU, dann Prozess 3 usw. a schluss wieder Prozess 1. Der Anwender merkt das nicht, weil es unglaublich schnell abläuft. Du kannst also der CPU nicht sagen, mach jetzt nur mein Skript und blockiere alles andere... (war auf dem Amiga mal möglich so das Multitasking zu überlisten und die CPU an sein Programm zu binden) aber heutzutage geht das wegen des total erzwungenen Multitaskings nicht mehr bzw. Somit kannst du dich nicht darauf verlassen, das nix passiert zwischen open und flock. Problematisch ist das vorallem für Dateisystemsachen und teils SQL. und bei dateien rate ich in demfall zu opensys, weil das die Datei mit 100% sicherheit nicht woanders neu erzeugt... Zudem ist sysopen auch einiges schneller... $i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
|