Bei großen Programmen kann es von Vorteil sein, einzelne Programmteile, auf die mehrere Benutzer (Tasks) zugreifen, gemeinsam benutzbar (shareable) zu machen.
Hierfür ist bei der Übersetzung eine der folgenden Steueranweisungen anzugeben:
COMOPT GENERATE-SHARED-CODE=YES
oder
SHAREABLE-CODE=YES
im MODULE-GENERATION-Parameter der COMPILER-ACTION-Option.
Der Compiler erzeugt dann zwei Objektmodule, wovon das eine den nicht mehrfachbenutzbaren Teil und das andere den gemeinsam benutzbaren Teil des Objekts enthält. Sie werden im Folgenden als „nicht gemeinsam benutzbares“ bzw. „mehrfachbenutzbares Modul“ bezeichnet. Die gemeinsam benutzbaren bzw. nicht mehrfachbenutzbaren Module können jeweils zu Großmodulen vorgebunden werden.
Die gemeinsam benutzbaren Module müssen entweder unmittelbar vom Compiler (über COMOPT-Anweisung MODULE bzw. SDF-Option MODULE-LIBRARY) oder mit dem Dienstprogramm LMS (siehe Handbuch [11]) in einer PLAM-Bibliothek abgelegt werden.
Alle nicht gemeinsam benutzbaren Teile eines Programms werden pro Task und Anwender in den Klasse-6-Speicher geladen.
Programmsysteme mit gemeinsam benutzbaren Modulen können nur mit dem Dynamischen Bindelader aufgerufen werden. Aufgerufen wird stets der Name des nicht gemeinsam benutzbaren (Daten)-Moduls. Dieses enthält Externverweise auf sein gemeinsam benutzbares Codemodul sowie ggf. auf andere nicht gemeinsam benutzbare Module.
Aufrufbeispiel:
/SET-TASKLIB $.SYSLNK.CRTE ————————————————————————————————————————————(1) /START-PROGRAM *MOD(bibliothek,element) ———————————————————————————————(2)
(1) | Mit dem SET-TASKLIB-Kommando wird die Bibliothek zugewiesen, die die COBOL2000-Laufzeitmodule enthält. |
(2) | element ist der Name des Datenmoduls oder Großmoduls, das mindestens den nicht gemeinsam benutzbaren Teil des Hauptprogramms enthalten muss. bibliothek ist die Bibliothek, in der die vom Benutzer geschriebenen Module stehen. |
Das folgende Bild veranschaulicht Programmläufe ohne und mit „Shared Code“:
Bild 3: Shared Code