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

freddy
 2009-08-10 18:46
#124081 #124081
User since
2009-08-08
95 Artikel
BenutzerIn

user image
2009-08-10T10:20:25 Taulmarill
Lass mich raten: du arbeitest auf Windows?

Jup. Lokal zum Vortest XP und Apache.

Und durch Dich animiert hab ich es auch nochmal umgebaut, sieht jetzt so aus:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sub create_link($) {
        my $fh = shift(@_);
        my $max = 10;
        my $err = '';
        sysopen($fh, "sysopentest.txt",O_RDWR|O_CREAT,0600) or $err=$!;
        if (!$err) {
                my $start = time;
                my $flock = flock($fh,LOCK_EX|LOCK_NB);
                while (!$flock && time-$start < $max) {
print "Flock: >$flock< warte 1\n";
                        sleep 1;
                        $flock = flock($fh,LOCK_EX|LOCK_NB);
                }
                $err = 'Timeout on flock' if !$flock;
        }
        return $err;
}


Und Deine Erfahrung unter Windows kann ich nicht bestätigen. Starte in DOS-Box 1 das Script, welches weiter unten nach Aufruf von create_link() 20 Sekunden sleep't.
Dann warte ich etwa 10 Sekunden und starte in DOS-Box 2 das gleiche Script nochmal.
Ergebnis: Script in DOS-Box 2 rennt los, sobald in DOS-Box 1 die Beendigung mit close() durch ist.

Also insofern aus meiner Sicht unter Windows sauberes flock() gemacht. Warum das bei meinem Ursprungscode irgendwie nicht wollte, weiß ich jetzt auch nicht mehr.

Danke

View full thread Flock mit timeout