|
Semaphor
mit Argumenten
∘
Strich
∘
nix
|
|
|
|
Sem:
P
V
Arg:
dec
dec?
inc
nix
|
Sem:
P
V
Arg:
dec
dec?
inc
nix
|
|
|
|
|
Semaphor
|
- Zähler, initial 0 oder positiv
- Wartemenge für Prozesse, initial leer
-
Prozess steht in Wartemenge, obwohl Zähler > 0.
-
Wenn Zähler > 0, dann Wartemenge leer.
|
P | V |
- Zähler > 0 ?
- Ja:
- Nein:
- Aufrufer blockieren
- Aufrufer in Wartemenge legen
|
- Wartemenge enthält Element?
- Ja:
- Prozess P aus Wartemenge nehmen
- P deblockieren
- Nein:
|
|
Semaphor mit Argumenten
|
- Zähler, initial 0 oder positiv
- Menge WR für Tupel (P,R)
aus wartendem Prozess mit Argument, initial leer, FIFO
-
Der vorderste Prozess in Menge WR wartet,
obwohl Zähler hoch genug.
-
Wenn Menge WR nicht leer,
dann Zähler < R0.
|
decrementSyn | incrementAsyn |
- falls R ≤ 0 : Abbruch mit Fehler guter Stil
- Menge WR leer und Zähler ≥ R ?
- Ja:
- Nein:
- Aufrufer blockieren
- (Aufrufer,R) in Menge WR legen
|
- falls H ≤ 0 : Abbruch mit Fehler guter Stil
- Zähler erhöhen um H
- solange Menge WR nicht leer und
R0 ≤ Zähler
- (P,R)0 aus Menge WR nehmen
- Zähler vermindern um R
- P deblockieren
|
decrementTry | - |
- falls R ≤ 0 : Abbruch mit Fehler guter Stil
- Menge WR leer und Zähler ≥ R ?
- Ja:
- Zähler vermindern um R
- Erfolg melden
- Nein:
|
|
|