[Allegro] Frage zu acon und "put"
Thomas Berger
ThB at Gymel.com
Di Jan 10 13:30:47 CET 2012
Lieber Herr Eversberg,
> Befehl Pruefung mit
>
> set tbl lock if yes/no (wenn gesperrt, werden 10 Versuche gemacht,
> mit je 1 Sek Pause)
> set tbl free keine, klappt immer (sonst versagt vorher schon
> "tbl lock")
Es waere ganz wichtig, dass auch hier ein Exit-Status zurueckgegeben
wird: Angenommen, das Lock ist zerbrochen worden (was nie passieren
*darf*, dann will man das immerhin bemerken koennen)
> set rec lock if yes/no
> set rec unlock if yes/no
>
> if Lock (aktueller Satz ist gesperrt)
> if not Lock (nicht gesperrt)
>
> ---------------------------------
>
> Damit ergibt sich als sinnvolle Sequenz vor und nach dem Speichern, und
> damit werden wir mal das Update-Prozedere durchtesten:
Das folgende ist, entschuldigen Sie die Direktheit, an
mehreren Stellen so fundamental vergurkt, dass ich gar nicht
weiss, wo ich mit dem Zerpfluecken anfangen soll.
Ich mache jetzt erst einmal Mittag und melde mich dann
wieder.
viele Gruesse
Thomas Berger
>
> :rloop
> // naechsten Satz einlesen
> ...
>
> // Zuerst Satzsperre pruefen, dreimal, erst 2, dann 8 Sek. Pause
> if not Lock jump settbl
> sleep 2000
> if not Lock jump settbl
> sleep 8000
> if not Lock jump settbl
> jump wasLocked
>
> // Satz ist nicht gesperrt
> :settbl
> // TBL sperren
> set tbl lock
> // zweiter Versuch (nochmal 10 Sek.)
> if no set tbl lock
> // dritter Versuch (nochmal 10 Sek.)
> if no set tbl lock
> // wieder nix, dann aufgeben
> if no jump tblTrouble
>
> // Nun den Satz NOCHMAL pruefen
> // - evt. gerade eben anderweitig gesperrt worden!
> // (sog. "race condition") Dann aufgeben
>
> if Lock jump wasLocked
> // aber nun kann das nicht mehr passieren, weil immer zuerst
> // die TBL gesperrt ist, und das haben wir ja selber gemacht
>
> // Satz sperren UND Schluessel merken
> // (fuer "put" wichtig, sonst muesste man set lock nicht machen!)
> set lock
> // Nun Satz ändern oder was auch immer
> ....
> // dann speichern
> set tbl free
> put
> if ok jump putok
> sleep 5000
> // zweiter Versuch, nach 5 Sek.
> put
> if ok jump putok
> jump putErr
>
> :putok
> jump rloop
>
> :wasLocked
> //Satz in die Protokolldatei o.a. mit write kn
> wri "Speichern misslungen, Satz gesperrt: " n kn n
> // weiter zum naechsten Satz
> jump rloop
>
> :putErr
> //Satz in die Protokolldatei o.a. mit write kn
> wri "Speichern misslungen: " n kn n
> // weiter zum naechsten Satz
> jump rloop
>
>
> B.E.
> _______________________________________________
> Allegro mailing list
> Allegro at biblio.tu-bs.de
> http://sun250.biblio.etc.tu-bs.de/mailman/listinfo/allegro
>
Mehr Informationen über die Mailingliste Allegro