Atari Logo
Atari Computer

Hauptseite -
Welches System? -
Hardware -
Software -
Emulatoren -
Internet
MausNet
Programmieren
Verweise
Über

Modula 2 Sprachbeschreibung


Home Inhaltsverzeichnis Prozedurvariable Hilfe zu diesem Hypertext

14 Nebenläufigkeit

Modula bietet die Möglichkeit von quasi parallel ablaufenden Co-Routinen, vergleichbar mit kooperativem Multitasking. Für jede Co-Routine muß eine Variable vom Typ PROCESS deklariert werden, die beim Umschalten den aktuellen Zustand speichert.

Ein neuer Prozeß wird mittels NEWPROCESS angelegt und bekommt als Parameter die Prozedur, die den Prozeß bildet, einen Speicherbereich der für die Daten verwendet werden kann, die Größe des Speicherbereichs und die dazu gehörende Variable vom Typ PROPCESS. In dem Beispiel unten muß für das Hauptprogramm kein neuer Prozeß angelegt werden, da dieser Prozeß schon läuft. Der Prozeß ist beendet, wenn die Prozedur beendet ist.

Zwischen den Co-Routinen wird mit der Prozedur TRANSFER umgeschaltet. Der erste Parameter dient dazu, den aktuellen Prozeßzustand zu speichern, der zweite ist der Prozeß, zu dem umgeschaltet werden soll.

Bsp.:

MODULE CoRoutinen;
FROM SYSTEM IMPORT ADR;
FROM Process IMPORT PROCESS, NEWPROCESS, TRANSFER;
FROM InOut IMPORT WriteInt, WriteLn;

VAR Ko1, Ko2, Msin : PROCESS;
    Zu1, Zu2 : ARRAY[0..1000] OF INTEGER;

PROCEDURE K1;
VAR i : INTEGER;
BEGIN
   i := -1;
   LOOP
      i := i + 1;
      IF i>100 THEN
         TRANSFER(Ko1,Main);
      END;
      WriteInt(i,5);
      WriteLn;
      TRANSFER(Ko1,Ko2);
   END;
END K1;

PROCEDURE K2;
VAR i : INTEGER;
BEGIN
   i := 1001;
   LOOP
      i := i - 1;
      WriteInt(i,5);
      WriteLn;
      TRANSFER(Ko2,Ko1);
   END;
END K2;

BEGIN
   NEWPROCESS(K1,ADR(Zu1),SIZE(Zu1),Ko1);
   NEWPROCESS(K2,ADR(Zu2),SIZE(Zu2),Ko2);
   TRANSFER(Main,Ko1);
END CoRoutinen.

Home Inhaltsverzeichnis Prozedurvariable Hilfe zu diesem Hypertext


Best viewed with any browser English version not yet available.

Änderungen und Irrtümer vorbehalten. Letzte Änderung:
14 September 2001.
Home - Mail an den Webmaster - Impressum