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