Semaphor
°

  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.
PV
  • Zähler > 0 ?
    • Ja:
      • Zähler vermindern um 1
    • Nein:
      • Aufrufer blockieren
      • Aufrufer in Wartemenge legen
  • Wartemenge enthält Element?
    • Ja:
      • Prozess P aus Wartemenge nehmen
      • P deblockieren
    • Nein:
      • Zähler erhöhen um 1
 
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.
decrementSynincrementAsyn
  • falls R ≤ 0 : Abbruch mit Fehler guter Stil
  • Menge WR leer und ZählerR ?
    • Ja:
      • Zähler vermindern um R
    • 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 R0Zä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ählerR ?
    • Ja:
      • Zähler vermindern um R
      • Erfolg melden
    • Nein:
      • Misserfolg melden