<< Inhaltsverzeichnis Suchen >>

SET_SYNCHRONIZED

Funktion

Syntax:

SET_SYNCHRONIZED(<NR>,<ALTWERT>,<NEUWERT>)

<NR> = <NUM-AUSDRUCK>
<ALTWERT> = <NUM-AUSDRUCK>
<NEUWERT> = <NUM-AUSDRUCK>

Bedeutung:

Unter Java laufen Macros, die über einen Timer gestartet werden, als eigener Thread parallel zur gerade laufenden Verarbeitung ab. Dateizugriffe und Zugriffe auf gemeinsam benutzte Variablen müssen deshalb synchronisiert werden.

Mit den Funktionen SET_SYNCHRONIZED und ADD_SYNCHRONIZED werden 10 Integer-Variablen (<NR> = 0,...,9) zur Verfügung gestellt, über die die Synchronisation erfolgen kann.

Die Funktion SET_SYNCHRONIZED prüft, ob die Variable <NR> den Wert <ALTWERT> hat. Falls ja, wird der Wert der Variablen auf <NEUWERT> geändert und die Funktion liefert als Ergebnis 1. Hat die Variable <NR> nicht den Wert <ALTWERT>, so wird der Wert der Variablen nicht verändert und SET_SYNCHRONIZED liefert als Ergebnis -1.

Ist <NR> < 0 oder > 9, so liefert SET_SYNCHRONIZED als Ergebnis -2. 

<NR>, <ALTWERT> und <NEUWERT> müssen ganzzahlige Werte enthalten.

SET_SYNCHRONIZED ist 'thread safe'. Dies bedeutet, daß sichergestellt ist, daß immer nur ein Thread auf die Variablen zugreifen kann und deshalb der Wert der Variablen immer wohl definiert ist.

Diese Funktion hat nur eine Wirkung unter Java. Sonst liefert sie als Ergebnis stets –1.

Beispiel:

ON TIMER MACRO LESEN.TERMIN
...

Macro LESEN.TERMIN:

/* Prüfen, ob Variable 2 von 0 auf 1 gesetzt werden kann
IF SET_SYNCHRONIZED(2,0,1) = -1
THEN /* Ein anderer Thread hat die Variable auf 1 gesetzt und ist mit
           /* der Verarbeitung noch nicht fertig
           /* ... Fehlermeldung ausgeben oder warten und Zugriff erneut
          /* versuchen
ELSE ... Termin aus Datei TERMINE lesen
         /* Variable wieder auf 0 zurücksetzen
        IF SET_SYNCHRONIZED(2,1,0) = -1
        THEN /* Zurücksetzen ist nicht möglich. Es muß sich dann um
                  /* einen Programmierfehler handeln, da ein anderer
                  /* Thread die Variable inzwischen auf einen anderen
                  /* Wert gesetzt hat.
        ENDIF
ENDIF                                                   

siehe auch:

ADD_SYNCHRONIZED