|
Haben Prozesse keine gemeinsamen Datenbereiche, so kann die Synchronisation der Prozesse nicht über gemeinsame Variablen erfolgen. Die Synchronisation muß hier durch Transferieren der Daten von einem Datenbereich in den anderen erfolgen, mittels NACHRICHTENAUSTAUSCH .
Nachrichten sind also Dateneinheiten, die Prozesse an andere Prozesse übergeben.
Bsp. zur Implementierung
( Botschaften {
message } )
SENDEN der Nachricht | ? Kommunikationskanal ? | EMPFANGEN der Nachricht |
{ send } | { communication channel } | { receive } |
- legt fest wohin - legt fest woher |
||
x := 12; | { x ist die Prozeßvariable, die in die Nachricht kopiert wird } | |
send x to Kanal7 | receive x from Kanal7; |
broadcast x ; | {entspricht einer Rundsendung, alle denkbaren Empfänger erhalten die Nachricht } |
multikcast x to {Kanal5, Kanal6, Kanal7} | { nur für Empfänger entsprechender Kanäle } |
receive x from Kanal7; | { x
wird der Empfangsoperation übergeben. Es gibt die folgenden
Empfangsmöglichkeiten:
|
nichtblockierend | {der Prozeß wird nur für die Dauer des Kopierens der Dateneinheit in den Kommunikationskanal blockiert} |
blockierend | {... bis eine Empfangsanweisung ausgeführt wird} |
Empfangsanweisungen
sind üblicherweise blockierend.
Der Nachrichtenaustausch erfolgt
Synchrones Kommunikationsverhalten wird erreicht, wenn Quittungen benutzt werden. Durch das Warten auf eine Quittung wird die Sende- und die Empfangsoperation blockiert.
|