3. Kommunikation

 


... [Informatikseminar WS04/05] ... [Inhalt] ... [zurück] ... [vor] ...

b. Anwendungen

Gegenseitiger Ausschluss durch Prozesskommunikation

Durch das Versenden und Empfangen von Nachrichten lässt sich relativ einfach der gegenseitige Ausschluss realisieren. Hierzu wird eine Mailbox „mutex“ eingeführt. Es wird asynchrone Kommunikation vorausgesetzt, sowie eine nicht-leere Initialisierung dieser Mailbox. Ein Programmausschnitt in Pseudocode sieht demnach wie folgt aus:

Mailbox mutex = not null;

while (true) {
  receive (mutex, msg);
  kritischer Abschnitt;
  send (mutex, msg);

}

Hier ist zu erkennen, dass der Prozess solange wartet (blockierendes Empfangen), bis eine Nachricht in der Mailbox mutex zur Abholung bereitsteht. Dadurch wird der Prozess aufgeweckt und tritt in seinen kritischen Abschnitt ein. Wenn dieser durchlaufen ist, sendet der Prozess eine Nachricht an die Mailbox, um den nächsten, auf den kritischen Abschnitt wartenden Prozess aufzuwecken.


Erzeuger-Verbraucher-Problem

Auch das schon weiter oben besprochene Erzeuger-Verbraucher-Problem lässt sich durch das Prinzip der Interprozesskommunikation lösen. Der zugehörige Beispiel-Quellcode sähe demnach wie folgt aus:

Erzeuger:

while (true) {
   produzieren(item);
   receive(verbraucher,m);
   message_vorbereiten(m, item);
   send(verbraucher, m);
}

Verbraucher:

for (i=0; i<N; i++) {
    send (produzent, m)
 }

 while (true) {
    receive(produzent, m);
    item_extrahieren(m, item);
    send(produzent, m);
    verbrauchen(item);
 }

In der for-Schleife des Verbraucherprozesses wird zuerst veranlasst, dass der Produzent N „items“ produziert, dadurch, dass ihm N Nachrichten geschickt werden. Der Erzeuger produziert immer ein item, wenn er eine Nachricht erhält. Dieses item sendet er dann in einer Nachricht an den Verbraucher.
Analog dazu wartet der Verbraucher darauf, ein item vom Produzenten zu erhalten, um dieses dann aus der Nachricht zu extrahieren und dem Produzenten eine leere Nachricht als Signal für das Anstoßen eines neuen Produktionsdurchlaufs zu senden.


... [Informatikseminar WS04/05] ... [Inhalt] ... [zurück] ... [vor] ...