zur Startseite vorige Seite nächste Seite
 
praktisches Beispiel:
 Erzeuger-Verbraucher-Problem 
 
Zusammenfassung Das Erzeuger-Verbraucher-Problem demonstriert, daß es in der Praxis nötig sein kann, daß pseudoparallel ausgeführte Prozesse globale Variablen benutzen. Bei fehlender Synchronisation der Prozesse, wie im folgenden Programm kann es zu Problemen kommen. 
 
Hinweise zur Simulation Grundsätzliche Möglichkeiten  

Falls Sie mit den grundsätzlichen Möglichkeiten aller Simulationen in diesem Lernprogramm noch nicht vertraut sind, sollten sie diese zunächst nachholen. Auf der Seite "Einführung in die Problematik: 2 Prozesse - eine globale Variable " werden sie unter den Hinweisen zur Simulation eines einfachen Algorithmus beschrieben. 

Die Funktion "Kritischer Ablauf" 

Beachten Sie, daß in der nun folgenden Simulation ein Button "Kritischer Ablauf" existiert. Wenn Sie diesen Button aktivieren, wird ein Trace in die Ablauftabelle geschrieben und ihre Position im Trace auf den Anfang gesetzt. Wenn Sie diesen Trace mit dem Button "Forward" verfolgen, gelangt die Simulation in einen Zustand, bei dem offenbar wird, daß dieser Algorithmus nicht korrekt ist. Es erscheint dann auch eine entsprechend Fehlermeldung. Diese Funktion soll Ihnen die Möglichkeit geben, sich den Weg in die kritische Situation zeigen zu lassen, falls Sie es vorziehen, diesen Weg lieber nachzuvollziehen, statt ihn selbst herauszufinden. 

Der Ringpuffer  

Die globalen Variablen r[0], r[1], r[2] repräsentieren den globalen Ringuffer, der im Beispiel aus einem Array der Länge 3 besteht. 

Benennung der Variablen 

Während die lokalen Variablen in den Quelltexten die Namen "elem" und "i" tragen, werden sie in der Animation und in der Ablauftabelle mit "elem_e", "elem_v" und "i_e", "i_v" bezeichnet, entsprechend dem Prozeß, zu dem sie lokal sind.

 
program Erzeuger_Verbraucher; 
const n =  3; 
type eintrag = {x}; 
var r:  array[0..n-1] of eintrag; 
     e: integer; 
Originalskript zu diesem Thema 
 
 
begin                        (*Hauptprogramm*) 
    e := 0; 
    parbegin erzeuger, verbraucher parend; 
end;
 
 
Probleme des Algorithmus  Der Zugriff auf die globale Variable e ist unsynchronisiert. Nachdem ein Prozess die Variable e gelesen hat, kann der andere Prozess auf die Variable zugreifen, bevor der erste Prozess die Variable zurückgeschrieben hat. 
Abstrahiert man dieses Problem erhält man das Problem des 
"wechselseitigen Ausschlusses".
 

 
zur Startseite vorige Seite nächste Seite