Christian Kruse: Counter mit Macken

Beitrag lesen

你好 Christian,

Die Datei wird von einem Benutzer geöffnet, geändert, gespeichert - in
der Zeit ist sie für andere Benutzer gesperrt. Diese werden in eine Art
Warteschlange gereiht. Ist der erste Benutzer fertig, so wird die Datei
freigegeben und der nächste darf öffnen, ändern, speichern.

So machst du es aber nicht. Um mal zwei Code-Stücke herauszupicken:

  
open(COUNT, "<$root/cgi-bin/counter/count.txt");  
flock COUNT, 2;  
$zaehlerstand = <COUNT>;  
close(COUNT);  

[…]

  
open(COUNT, ">$root/cgi-bin/counter/count.txt");  
flock COUNT, 2;  
print COUNT "$zaehlerstand";  
close(COUNT);  

Prozess a läuft in das erste Code-Stück. $zaehlerstand ist korrekt befüllt.
Dann wird er schlafen gelegt. Prozess b läuft in das erste Code-Stück,
$zaehlerstand wird auch hier korrekt befuellt. Dann laeuft Prozess a in
den zweiten Schnippsel, macht das open(COUNT,">...") und wird schlafen
gelegt. Prozess c läuft in das erste Code-Stück, $zaehlerstand ist jetzt 0
da die Datei durch das open(COUNT,">...") leer ist. Prozess b läuft weiter,
macht das open(COUNT,">...") und schreibt $zaehlerstand hinein. Prozess a
läuft weiter und schreibt seine Version von $zaehlerstand hinein. Welche
ist nun richtig? Und, um es noch schlimmer zu machen: Prozess c schreibt
seinen Wert nun auch in die Datei: der Zähler fängt wieder bei 0 an.

再见,
 克里斯蒂安

--
Neue Hardware eingebaut | Der dritte mir bekannte Block-Nutzer
Wenn du gehst, gehe. Wenn du sitzt, sitze. Und vor allem: schwanke nicht!
http://wwwtech.de/