Schrift
[thread]7439[/thread]

Frage zu flock()



<< >> 3 Einträge, 1 Seite
Froschpopo
 2005-11-06 00:50
#59780 #59780
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
wie ist das eigentlich im CGI?
Wenn ich ein Locking LOCK_EX auf eine Datei anwende auf die gerade ein anderer Prozess zugreifen möchte, wird dann die Ausgabe verzögert, oder gibt das im anderen Prozess dann ein "Wahr" als Rückgabewert von flock() ?

Ich möchte bei meinem Besucherzähler absolut jeden einzelnen Klick zählen.
mal angenommen ich mache folgendes:
Code: (dl )
flock(FILE, LOCK_EX) or die;

dann würde ja dieser eine Besucher, dessen Dateizugriff durch das Locking blockiert wird, NICHT gezählt werden, oder sehe ich da etwas falsch? Wäre ja auch möglich, dass er quasi "Aufgeschoben" wird, sprich in eine Art Warteschleife gepackt wird.

Kann mir da jemand Auskunft geben?\n\n

<!--EDIT|Froschpopo|1131231213-->
pq
 2005-11-06 02:26
#59781 #59781
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Froschpopo,05.11.2005, 23:50]wie ist das eigentlich im CGI?
Wenn ich ein Locking LOCK_EX auf eine Datei anwende auf die gerade ein anderer Prozess zugreifen möchte, wird dann die Ausgabe verzögert, oder gibt das im anderen Prozess dann ein "Wahr" als Rückgabewert von flock() ?[/quote]
das hat nicht direkt was mit dem CGI zu tun, sondern generell mit nebenläufigen prozessen.
Quote
Ich möchte bei meinem Besucherzähler absolut jeden einzelnen Klick zählen.
mal angenommen ich mache folgendes:
Code: (dl )
flock(FILE, LOCK_EX) or die;

dann würde ja dieser eine Besucher, dessen Dateizugriff durch das Locking blockiert wird, NICHT gezählt werden, oder sehe ich da etwas falsch? Wäre ja auch möglich, dass er quasi "Aufgeschoben" wird, sprich in eine Art Warteschleife gepackt wird.

flock wartet so lange, bis es den lock kriegt (es sei denn, man verwendet LOCK_NB)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
betterworld
 2005-11-06 03:24
#59782 #59782
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Warum probierst Du es nicht einfach aus? Nimm Dir eine Shell, gib ein:
Code: (dl )
perl -MFcntl=:flock -we 'open F, ">lock" or die "open"; flock(F, LOCK_EX) or die "flock: $!"; print "geflockt\n"; sleep 20'
Dann nimm Dir eine zweite Shell, gib noch einmal dasselbe ein. Und siehe da, in der zweiten Shell kommt das "geflockt" nicht, bevor das erste Skript 20 Sekunden lang gewartet hat.
<< >> 3 Einträge, 1 Seite



View all threads created 2005-11-06 00:50.