Einfache Barrier für Internet-Knoten
Zweck
In einem IP-Netzwerk möchte man sicherstellen, daß Prozesse alle gleichzeitig
an einem Punkt, die Barrier, angelangt sind, bevor sie weitermachen.
TCP/IP-Implementierung
Hier wird zentral auf einem ausgewählten Rechner der barrierdaemon
gestartet.
Die zu synchronisierenden Prozesse melden sich an mit ihrer ID, und mit dem
wunsch, wieviele dabei beteiligt sind, beim barriuerdaemon an (send) und blokieren sich mit einem recv. Sobald alle angemeldet haben, sendet der Barrierdeamon die Antwort.
Um den Client in verteilte Programme einfach zu Testzwecken einbauen zu können,
und ggf. andere Implementierungen wählen zu können, wird das Verhalten ausschließlich über Environment Variablen gesteuert:
- BARRIER_HOST
- Der Name des zentralen Rechners auf dem der Barrierdeamon läuft
- BARRIER_PORT
- Default 12000
- BARRIER_FIRST_ID (long)
- Erste ID. Diese wird dann bei jeder Barrier incrementiert.
- BARRIER_WAIT_ON (long)
- Anzahl der Prozesse, auf die gewartet wird.
- DBG_BARRIER (long)
- Falls gesetzt erscheint eine Debugausgabe
Beispiel für Umgebung mit zwei Prozessen:
export BARRIER_HOST=fetzi
export BARRIER_PORT=12000
export BARRIER_FIRST_ID=1
export BARRIER_WAIT_ON=2
export DBG_BARRIER=1
Multi-Cast-Implementierung
(Idee, Implementirung noch offen)
Der wichtigste Vorteil ist, daß hier die Gleichzeitigkeit noch mehr erreicht wird.
Hier wird kein Barrierdeamon gebraucht. Allerdings muß man damit rechnen, daß
Pakete verloren gehen.
Algorithmus:
Data structure:
- READY
- menge der fertigen Teilnehmer
- ALL_PARTICIPANTS
- Menge alle Teilnehmer
READY=LEER;
send message
while READY != ALL_PARTICIPANTS
recv message && READY := READY v sender(messages)
if(timeout) send(messages);
end
Download
barrier.tgz
Copyright nach GNU Copyleft LGPL 2002
Rudolf Weber Informatik- und Netzwerkverin Ravensburg e.V