Suche Home Einstellungen Anmelden Hilfe  

Beispiele für die Synchronisation
 ( Speisende Philosophen )

Die Kommunikation durch Nachrichtenaustausch steht der über gemeinsame Variablen in nichts nach. Ein synchroner Nachrichtenaustausch wird bereits unabhängig von den übertragenen Daten zur Prozeßsynchronisation verwendet. Es ist möglich  sequentielle Algorithmen in nebenläufige Algorithmen umzuwandeln.

Beispiel:  Speisende Philosophen  [ FÜNF-PHILOSOPHEN-PROBLEM]

Die fünf Stäbchen und fünf Philosophen werden durch je einen Prozeß modelliert. Außerdem gibt es einen Prozeß essen, der verhindert, daß zu einer Zeit mehr als vier Philosophen zum Essen am Tisch sitzen. Eine Verklemmung wird so vermieden.

                                      essen ! anfangen ( );     {der Prozeß essen erhält ein Signal}
                                    stäbchen(i) ! aufnehmen ( );
                                    stäbchen ((i+1) mod 5) ! aufnehmen ( );
                                    comment Essen;
                                    stäbchen (i) ! niederlegen ( );
                                    stäbchen ((i+1) mod 5) ! niederlegen ( );
                                    essen ! aufhören ( );
                            ]

Das i-te Stäbchen kann vom Philosophen i oder seinem Nachbarn (i-1) mod 5 verwendet werden. Wenn ein Philosoph ein Stäbchen aufnimmt, so kann es auch nur dieser  Philosoph wieder niederlegen. ( indizierte bewachte Anweisung )

stab = *[      philosoph (i) ? aufnehmen ( ) ? philosoph (i) ? niederlegen
[] philosoph ((i-1) mod 5 ? aufnehmen ( )  ? philosoph ((i-1) mod 5 ? niederlegen ( )
             ]

Das Signal, daß ein Philosoph essen will, kann nur bei geeigneter Gästezahl akzeptiert werden. ( gäste < 4 )

        tafel = gäste : integer;
                   gäste := 0;
                  *[    (i:0..4)gäste < 4; philosoph (i) ? anfangen ( ) ? gäste := gäste + 1
                      [] (i:0..4) philosoph (i) ? aufhören ( ) ? gäste := gäste – 1
                    ]

 Dieses Programm erlaubt wie früher das Aushungern eines Philosophen.

                                                                                                                                               Gliederung

Benutzer: Gast • Besitzer: didaktik • Zuletzt geändert am: