tag:forum.selfhtml.org,2005:/self PERL und Threadnumber (WWWBOARD.PL) ? – SELFHTML-Forum 1999-02-02T09:57:00Z https://forum.selfhtml.org/self/1999/feb/2/perl-und-threadnumber-wwwboard-pl/9382?srt=yes#m9382 Klaus Junge 1999-02-02T09:29:00Z 1999-02-02T09:29:00Z PERL und Threadnumber (WWWBOARD.PL) ? <p>Hallo,</p> <p>am Freitag hat Jörk mir einen PL-Script-Entwurf<br> zur Verfügung gestellt und nun bin ich halt am<br> Vokabeln pauken. In dem Zusammenhang hab' ich auch<br> in das Script WWWBOARD.PL von Matt Wright geschaut.<br> An einer Stelle wurde ich an die verlinkten Thread-<br> nummern erinnert, kann die Umstände aber noch nicht<br> beurteilen.</p> <p>Am Anfang des Scripts wird aufgerufen:</p> <p>############################</p> <h3>Get Data Number Subroutine</h3><p>sub get_number {<br>    open(NUMBER,"$basedir/$datafile");<br>    $num = <NUMBER>;<br>    close(NUMBER);<br>    if ($num == 99999)  {<br>       $num = "1";<br>    }<br>    else {<br>       $num++;<br>    }<br> }</p> <p>später dann:</p> <p>sub increment_num {<br>    open(NUM,">$basedir/$datafile") || die $!;<br>    print NUM "$num";<br>    close(NUM);<br> }</p> <p>Ich verstehe das so, dass er sich am Anfang die<br> Nummer holt und erst später die neu angepasste<br> zurückschreibt. Zwischenzeitlich ist die Datei<br> DATA.TXT geschlossen (?!).</p> <p>Meines Erachtens kann das nur dann gutgehen,<br> wenn gewährleistet wäre, dass jeweils nur eine<br> Instanz des Programms laufen könnte.<br> Von modernen Betriebssystemen würde ich aber<br> eigentlich schon erwarten, dass mehre Instanzen<br> gleichzeitig aktiviert werden können.</p> <p>Wie verhält sich das in Wirklichkeit?</p> <p>Klaus</p> https://forum.selfhtml.org/self/1999/feb/2/perl-und-threadnumber-wwwboard-pl/9383?srt=yes#m9383 Stefan Muenz 1999-02-02T09:52:00Z 1999-02-02T09:52:00Z PERL und Threadnumber (WWWBOARD.PL) ? <p>Hallo Klaus,</p> <blockquote> <p>Ich verstehe das so, dass er sich am Anfang die<br> Nummer holt und erst später die neu angepasste<br> zurückschreibt. Zwischenzeitlich ist die Datei<br> DATA.TXT geschlossen (?!).<br> Meines Erachtens kann das nur dann gutgehen,<br> wenn gewährleistet wäre, dass jeweils nur eine<br> Instanz des Programms laufen könnte.</p> </blockquote> <p>Wenn Du mal etwas zurueckgehst in den juengeren Archivdateien hier, wirst Du auf Threads stossen, in denen Leute "es nicht glauben koennen" oder "wahnsinnig werden" <g>, weil irgendwas mit Messagenummern und File-Zuordnung nicht stimmte. Vermutlich ist da genau der Fall eingetreten, dass zwei Leute zeitlich so dicht einen neuen Script-Prozess angestossen haben, dass die Datei vom einen Prozess mittlerweile aktualisiert wurde, bevor sie vom anderen erneut geoeffnet wurde.<br> Aus der Welt schaffen koennte man das durch Einsatz der Perl-Funktion flock(), die es erlaubt, geoeffnete Dateien vor dem Zugriff anderer Prozesse zu schuetzen. Das wuerde allerdings in dem jetztigen Zustand des Scripts bedeuten, dass der zweite Prozess die Datei mit dem Zaehlerstand eben nicht oeffnen kann und deshalb stirbt. Da schaut er dann auch dumm, der User <g>. Man muesste das Script also so umschreiben, dass es - falls die Datei mit dem Zaehlerstand aufgrund einer flock-Sperre nicht geoeffnet werden kann, den open-Befehl in einer Schleife mit gewissen Timeouts so oft wiederholt, bis er erfolgreich ist (= bis der andere Prozess mit einem entsprechenden flock-Aufruf die Zaehlerstanddatei wieder freigegeben hat).</p> <p>Wenn das jetzt aber sofort wieder zum Thema "Idee fuer's Forum" wird, werde ich wahnsinnig und kann's nicht glauben <g>.</p> <p>viele Gruesse<br>   Stefan Muenz</p> https://forum.selfhtml.org/self/1999/feb/2/perl-und-threadnumber-wwwboard-pl/9384?srt=yes#m9384 Klaus Junge 1999-02-02T09:57:00Z 1999-02-02T09:57:00Z PERL und Threadnumber (WWWBOARD.PL) ? <p>Hallo Stefan,</p> <blockquote> <p>Wenn das jetzt aber sofort wieder zum Thema "Idee fuer's Forum" wird, werde ich wahnsinnig und kann's nicht glauben <g>.</p> <p>viele Gruesse<br>   Stefan Muenz</p> </blockquote> <p>nee, lass das bloss bleiben,<br> wir brauchen Dich doch noch.</p> <p>Klaus</p>