Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Funktionen des DLM

&pagelevel(5)&pagelevel

  • Lock erstellen

    Eine Task, die einen Lock verwenden will, muss ihn zuerst erstellen. Dies geschieht implizit beim Aufruf des Makros LKENQ. Der Lock wird durch den DLM erstellt. Bei der Erstellung eines noch nicht existierenden Locks werden beide Teile des Locks, der Benutzer-abhängige und der Benutzer-unabhängige Teil, erstellt.
    Existiert der zu erstellende Lock bereits, wird nur ein Benutzer-abhängiger Teil neu erstellt und mit dem Benutzer-unabhängigen Teil verkettet.

    Lock-Kurzkennung (LOCKID)

    Nach der Erstellung eines Locks erhält die Task eine (Task-spezifische) Lock-Kurzkennung (Makro LKENQ, Operand LOCKID). Die Lock-Kurzkennung muss von der aufrufenden Task angegeben werden, wenn andere Aufrufe an den DLM erfolgen, die sich auf den gleichen Lock beziehen. Andere Tasks, die den gleichen Lock und damit den gleichen Lock-Namen verwenden, haben andere Lock-Kurzkennungen für diesen Lock.
    Die Lock-Kurzkennung wird ungültig, wenn das aufrufende Programm sie freigibt (Makro LKDEQ) oder das Programm beendet wird.
    Vom DLM wird niemals der Wert 0 für eine Lock-Kurzkennung geliefert.

    Um inkompatible Lock-Anforderungen zu vermeiden, sollte eine neue Lock-Anforderung immer mit LCKMODE=*NU erstellt werden (Makro LKENQ), da sie sofort zugeteilt wird (Zustand GRANTED). Sonst erhält die Lock-Anforderung den Zustand WAITING. Dort muss sie warten, bis alle Lock-Anforderungen im Zustand GRANTED und CONVERTING freigegeben wurden, bevor sie zugeteilt wird. Ist die Lock-Anforderung zugeteilt, kann der Lock-Modus mit dem Makro LKCVT konvertiert werden. Es erfolgen dann nur noch Wechsel zwischen den Zuständen GRANTED und CONVERTING (siehe "Aufbau eines DLM-Locks").
  • Lock-Anforderung konvertieren

    Ein existierender und bereits zugeteilter Lock eines Benutzers kann von einem Lock-Modus in einen anderen Lock-Modus konvertiert werden (Makro LKCVT). Die LKCVT Anforderungen werden ausgeführt, bevor eine neue Lock-Anforderung (Makro LKENQ) ausgeführt wird, außer Lock-Anforderungen im NU-Modus.

    Während der Konvertierung des Lock-Modus bleibt der Lock im ursprünglichen Lock-Modus zugeteilt. Die Lock-Anforderung erhält den Zustand CONVERTING. Kann die Lock-Anforderung zugeteilt werden, erhält sie den Zustand GRANTED. Der Lock-Modus wurde konvertiert.

    Relation der Lock-Modi

    Lock-Modus 1

    Lock-Modus 2

    NU

    CR

    CW

    PR

    PW

    EX

    NU

    e

    h

    h

    h

    h

    h

    CR

    l

    e

    h

    h

    h

    h

    CW

    l

    l

    e

    h

    h

    h

    PR

    l

    l

    h

    e

    h

    h

    PW

    l

    l

    l

    l

    e

    h

    EX

    l

    l

    l

    l

    l

    e

    e: Lock-Modus 2 ist gleich Lock-Modus 1
    l : Lock-Modus 2 ist schwächer als Lock-Modus 1
    h: Lock-Modus 2 ist stärker als Lock-Modus 1

  • Lock freigeben

    Die Freigabe eines Locks kann auf zwei Arten erfolgen:

    1. Der Lock kann von der aufrufenden Task freigegeben werden (Makro LKDEQ). Das bedeutet, dass die zugeteilte Lock-Anforderung des Aufrufers gelöscht wird, und die Lock-Kurzkennung (LOCKID) ungültig wird. Weiterer Gebrauch der ungültigen Lock-Kurzkennung führt zu Fehler-Codes, insbesondere wenn der Lock noch existiert. Der Benutzer-abhängige Teil des Locks und alle seine Benutzer-spezifischen Informationen, die zusammen mit dem Lock gespeichert wurden, werden aus der DLM-Datenstruktur gelöscht. Ist dieser Benutzer der letzte (einzige) Benutzer dieses Locks, wird der Benutzer-unabhängige Teil des Locks ebenfalls gelöscht. Dadurch wird der Lock selbst aus der DLM-Datenstruktur gelöscht.

    2. Die existierende Lock-Anforderung einer Task kann in einen schwächeren Lock-Modus konvertiert werden (siehe Tabelle auf "Aufbau eines DLM-Locks"). Die Lock-Kurzkennung (LOCKID) bleibt gültig und kann weiter benutzt werden (Makro LKCVT).

  • Lock-Anforderung löschen

    Lock-Anforderungen, die noch nicht vom DLM zugeteilt wurden, können mit dem Makro LKCAN gelöscht werden.

    Die Lock-Anforderungen, die vom Makro LKENQ erstellt wurden und sich im Zustand WAITING befinden, werden vollständig gelöscht. Befindet sich die Lock-Anforderung im Zustand GRANTED, d.h der Lock ist bereits zugeteilt, wird mit einem Fehler-Code abgebrochen. Diese Lock-Anforderung muss mit dem Makro LKDEQ freigegeben werden.

    Die Lock-Anforderungen, die durch den Makro LKCVT konvertiert werden sollen und sich im Zustand CONVERTING befinden, werden nicht gelöscht. Es wird nur der Konvertierungs-Auftrag gelöscht.

    Der Aufruf kann synchron oder asynchron erfolgen.

  • Informationen über Locks ausgeben

    Der Makro LKINF informiert darüber, welche Locks bereits benutzt werden. Zur besseren Auswahl können einige Such-Filter aktiviert werden. Die Locks werden über ihre Lock-Namen identifiziert. Die Lock-Namen können voll- oder teilqualifizierte Namen sein. Bei Angabe von teilqualifizierten Lock-Namen kann der Zugriff ggf. sehr lange dauern, da die gesamte DLM-Datenbasis nach Treffern durchsucht werden muss. Dies hängt von der Größe der DLM-Datenbasis ab.

  • Erkennung der Zeitlimitüberschreitung

    Der Benutzer kann eine Wartezeit und eine Haltezeit für die Lock-Anforderung festlegen, die vom DLM überprüft wird. Kann die Lock-Anforderung während der Wartezeit nicht zugeteilt werden, wird sie mit einem Fehler-Code abgebrochen oder es wird ein Wartezeit-Überschreitungs-Ereignis generiert.

    Überschreitet die Haltezeit das Zeitlimit, wird der Lock-Halter durch ein Freigabe-Ereignis darüber informiert.
    Wenn eine Haltezeit spezifiziert wird, muss auch ein Freigabe-Ereignis (RELEVTT) angegeben werden.

    Wurde der Wert 0 beim Zeitlimit für die Lock-Anforderung angegeben, wird diese Lock-Anforderung als Sofort-Anforderung bezeichnet. Sofort-Anforderungen, die nicht zugeteilt werden können, werden mit dem Returncode X'00828006' beendet.

  • Lock-Status-Block

    Der Lock-Status-Block (LSB) ist Teil des Benutzer-Adressraums und hat zwei Hauptaufgaben.

    Erstens wird der LSB für alle asynchronen DLM-Aufrufe gebraucht. Der LSB ist der Kommunikations-Bereich zwischen dem DLM und dem aufrufenden Programm. Die asynchrone Zuteilung des Locks wird dem Benutzer durch das Setzen des entsprechenden Returncode im LSB gemeldet. Der Benutzer wird über die angegebene Ereignis-Methode informiert.

    Der LSB muss initialisiert werden, bevor asynchrone Funktionen vom DLM angefordert werden. Dies geschieht durch Aufruf des Makros LKLSB mit MF=L. Die Initialisierungs-Werte werden in den LSB-Bereich geschrieben. Der DLM kann nun entscheiden, ob die übergebene Adresse auf einen gültigen LSB zeigt oder nicht. Wird der Lock zugeteilt, muss der LSB für den DLM verfügbar sein. Es werden sonst keine Daten übergeben. Der Fehler wird dem aufrufenden Programm über die Ereignis-Methode gemeldet.

    Zweitens wird der LSB gebraucht, wenn der Lock-Value-Block gelesen oder geschrieben werden soll. Dies ist unabhängig von synchronen oder asynchronen Anforderungen.

    Der Lock-Wert, den der Benutzer schreiben will oder den er bei einer Leseanforderung geliefert bekommt, befindet sich im Lock-Status-Block. Die Adresse des LSBs wird in der Operanden-Liste des aktuellen DLM-Aufrufs angegeben (Operand LSBADR in den Makros LKENQ, LKCVT, LKDEQ und LKCAN).

  • Status-Information

    Der DLM behält Status-Informationen über die Freigabe des letzten Locks im PW- oder EX-Modus. Wurde die Freigabe normal ausgeführt, hat der Lock-Halter selbst den Lock freigegeben (Makro LKDEQ). Die Status-Information wird auf VALID gesetzt.

    Wurde die Freigabe abnormal beendet, wird die Status-Information auf INVALID gesetzt. Abnormal beendet wird die Freigabe, wenn das Programm, die Task oder der Knoten, auf dem sich der Lock-Halter befindet, beendet wurde, bevor der Lock freigegeben wurde.

    Die Status-Information liefert Informationen über die Gültigkeit des Lock-Value-Blocks, der auf dieselbe Weise behandelt wird. Die Behandlung der Status-Information ist nicht notwendigerweise an eine Behandlung des Lock-Value-Blocks geknüpft.

    Die Status-Information wird an jeden folgenden Lock-Halter übermittelt, bis die Status-Information wieder auf VALID gesetzt wurde. War der angeforderte Lock-Modus NU oder CR, ist die Information möglicherweise nicht mehr aktuell.

    Die Status-Information INVALID kann auf VALID zurückgesetzt werden, wenn ein weiterer Lock-Halter den Lock im PW- oder EX-Modus anfordert, zugeteilt bekommt und bei der Freigabe angibt, dass der Status zurückgesetzt werden soll. Dies kann unabhängig vom Lock-Value-Block geschehen. Es ist aber mit einem DLM-Aufruf möglich, den Lock-Value-Block zu verändern und den Status auf VALID zurückzusetzen.

  • Beendigungs-Sequenz der Lock-Anforderungen während der Beendigung des Lock-Halter-Prozesses

    Während der abnormalen Beendigung eines Lock-Halter-Prozesses (Task oder Programm) werden die Lock-Anforderungen in einer definierten Sequenz freigegeben.

    Während der Erstellung einer Lock-Anforderung kann der Aufrufer die Freigabe-Zeit seines Locks in einer der drei Klassen angeben (Operand TERMNTE im Makro LKENQ):

    FIRST

    Diese Klasse enthält Locks, die bevor oder zur gleichen Zeit freigegeben werden, wie die Locks der folgenden Klasse SECOND freigegeben werden.

    SECOND

    Diese Klasse enthält Locks, die nachdem oder zur gleichen Zeit freigegeben werden, wie die Locks der vorherigen Klasse FIRST freigegeben werden. Und bevor oder zur gleichen Zeit, wie die Locks der folgenden Klasse THIRD freigegeben werden.

    THIRD

    Diese Klasse enthält Locks, die nachdem oder zur gleichen Zeit freigegeben werden, wie die Locks der vorherigen Klasse SECOND freigegeben werden.

    Um sicherzustellen, dass alle Locks von verschiedenen Prozessen, die zu derselben Anwendung gehören, auf dieselbe Weise behandelt werden, muss der Aufrufer sicherstellen, dass alle LKENQ-Anforderungen mit denselben Operanden aufgerufen werden.
    Während des LKENQ-Aufrufs wird dies vom DLM nicht überprüft.