Nachrichtenaustausch
in CSP
C
ommunication S
equential P
rocesses
CSP
ist eine rudimentäre Sprache, die keine praktische Anwendung findet,
sie dient der Beschreibung von Prozessen.
Ausgabeanweisung
eines Sender
P1 !
w; dem Prozeß P1 wird der Wert
w gesendet.
Eingabeanweisung beim
Empfänger
P2 ?
v; von einem Prozeß P2 wird die
Nachricht im Wert
v empfangen.
Variablen in Ausgabe
und Eingabeanweisungen
-
die Variable kann einen
Wert annehmen
P5 ! r;
r:= 42 oder
r:=‘ Heute ... ‘
-
die Variable kann als
Verbundanweisung deklariert werden.
P3 ? u;
u:= auftrag( datum, nummer, artikel)
-
die Variable kann komponentenlos
sein und wird als Signal bezeichnet, das
zur Synchronisation dient und nicht zum Datenaustausch.
-
Alternativ-Anweisungen
werden prozeßabhängig ausgeführt [] WÄCHTER
Beispiel:
Eingabeanweisung beim Empfänger
[
P1 ? variable ? anweisung1
[]
P2 ? variable ? anweisung2
[]
P3 ? variable ? anweisung3
]
-
Ein Wächter kann
neben oder statt der Kommunikationsanweisung Bedingungen
enthalten.
[
zähler > 0 ; P1 ? variable
? anweisung1
[]
zähler > 0; zähler < N ;P2 ? variable ? anweisung2
[]
zähler < 0;
? anweisung3
]
Bestehen mehrere Kommunikationsmöglichkeiten
wird eine dieser Alternativen nichtdeterministisch
ausgeführt.
Wird als Wächter
true angegeben, so wird diese Anweisung
immer ausgeführt.
Soll keine Anweisung
unter bestimmten Bedingungen ausgeführt werden,
so lautet die Anweisung
skip .
Ein Prozeß darf in CSP nicht mit sich selbst kommunizieren. Rekursive
Algorithmen
müssen in Prozeßfeldern implementiert werden.
Prozesse in CSP
werden als nebenläufige Blöcke beschrieben.
Jeder Block erhält
einen Namen, der in Ein- und Ausgabeanweisungen zur Angabe des
Kommunikationspartners
benutzt wird. Werden
mehrere Prozesse mit gleichem Rumpf vereinbart, so wird ein durch Angabe
eines Indexbereiches
ein Prozeßfeld definiert.
[
auftraggeber :: an_weisung || auftraggeber(i:1 .. N) :: ag_anweisung ]
Beispiel : Eine Nachricht
wird zwischen zwei Prozessen hin und hergeschickt.
{ Dem Prozeß
P2 wird eine Nachricht gesendet, der Prozeß empfängt
diese Nachricht.
* bedeutet Wiederholungsanweisung .}
perpetuum2
= nachricht : integer;
*[
P1 ! nachricht ? P1 ? nachricht ]
zurück
zur Gliederung
|
Benutzer: gast
Besitzer: didaktik Zuletzt geändert am:
|
|
|