Semaphore (Programmierung)
Semaphoren sind die klassische Methode, den Zugriff auf gemeinsam genutzte Ressourcen (z.B. Speicher) in einem Mehrprozesssystem zu regeln. Sie wurden von Edsger Dijkstra erfunden und zuerst im T.H.E Betriebssystem verwendet.Eine Semaphore ist eine geschützte Variable (oder ein abstrakter Datentyp), auf die nur über folgende Funktionen zugegriffen werden kann:
P(s)
Semaphore s;
{
while (s == 0) ; /* warte bis s>0 */
s = s-1;
}
V(s)
Semaphore s;
{
s = s+1;
}
Init(s, v)
Semaphore s;
Int v;
{
s = v;
}
P und V stehen für Holländisch "Proberen", probieren und "Verhogen", erhöhen. Der Wert einer Semaphore ist die Anzahl an freien Einheiten der Ressource (wenn es nur eine Ressource gibt, wird eine "binäre Semaphore" mit dem Wert 0 oder 1 verwendet). Die Funktion P() wartet, bis eine Ressource verfügbar ist, worauf sie unmittelbar darauf eine beansprucht. V() ist die umgekehrte Funktion, die die Ressource wieder verfügbar macht, nachdem sie vom Prozess nicht mehr verwendet wird. Die Funktionen P() und V() müssen atomar sein, d.h. kein anderer Prozess kann auf die Semaphore während deren Ausführung zugreifen.Um eine Warteschleife zu vermeiden, kann eine Semaphore eine Liste von Prozessen zugeordnet haben. Wenn ein Prozess die P()-Funktion ausführt und damit die Semaphore auf Null setzt, dann wird der Prozess dieser Liste hinzugefügt. Wenn ein Prozess die Semaphore mit der V()-Funktion erhöht, und andere Prozesse in der Warteliste sind, dann wird einer davon von der Liste genommen und fortgesetzt.
siehe auch: Interprozesskommunikation






