Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Reentrant-Fähigkeit von Teilprogrammen

Ein Teilprogramm wird bei openUTM immer durch einen Transaktionscode aufgerufen. Das Teilprogramm wird jedoch nicht bei jedem Aufruf neu geladen, sondern eine Programmkopie im virtuellen Speicher bearbeitet nacheinander unabhängige Aufträge. Konkret heißt dies, dass nach einem PEND ein Prozesswechsel stattfinden kann, so dass das Folgeteilprogramm in einem anderen Prozess läuft und damit ggf. auch eine andere Datenumgebung vorfindet.

Daher muss ein UTM-Teilprogramm seriell wiederverwendbar, d.h. reentrant-fähig sein:

  • Programm-spezifische Daten müssen zu Beginn des Teilprogrammlaufs in den Ausgangszustand versetzt werden.

  • Ein Programm-spezifisches Datenfeld darf erst gelesen werden, wenn es vorher im gleichen Teilprogrammlauf beschrieben wurde.

openUTM erleichtert Ihnen die Programmierung reentrant-fähiger Programme durch einen speziellen, von openUTM verwalteten Teilprogramm-spezifischen Speicherbereich (SPAB, siehe "Standard Primärer Arbeitsbereich (SPAB)"). Wenn Sie für alle variablen Daten diesen Speicherbereich verwenden, wird die Reentrant-Fähigkeit von openUTM automatisch gewährleistet.

Dieses heißt konkret für COBOL-Teilprogramme, dass Variablen in der WORKING-STORAGE SECTION beim Aufruf des Teilprogramms wieder initialisiert werden müssen, so weit sie in einem vorherigen Teilprogrammlauf beschrieben worden sind. Für C/C++ gilt die letzte Aussage für die Variablen mit dem Speicherklassenattribut static bzw. extern und den Variablen mit einer externen Bindung (modulglobale Variablen ohne Speicherklassenattribut). Für Variablen mit prozessübergreifendem Geltungsbereich (liegen im Shared Memory) gilt zusätzlich, dass zumindest ein schreibender Zugriff hierauf serialisiert werden muss. Die oben genannten Variablen können aber ohne Einschränkung zum Nur-Lesen benutzt werden.

Für C/C++ dürfen unbedenklich Variablen mit dem Speicherklassenattribut auto bzw. register verwendet werden; diese müssen dann aber vor dem Lesen beschrieben werden.