Semafory
- synchronizační nástroj (primitivum)
- vytvořil Dijkstra, analogie semaforů na železnici
- v rozumných programovacích jazycích již implementovány
- jedná se o datovou strukturu
k… počet zdrojů (zadá se při vytváření)P… operace wait/počkat (=k--nebo pokud jek = 0, zablokuje běžící proces)V… operace signal/vyhlásit (= pokud existuje zablokovaný proces, tak 1 odblokuje nebok++) - čekající procesy jsou ve frontě (FIFO)
Invarianty semaforů
-
hodnota semaforu
knesmí být menší než0(pokud by toPmělo způsobit, proces čeká) -
operace
Vmusí případný čekající proces korektně probudit -
aktuální počet zdrojů:
Implementace

s… aktuální počet zdrojů- pro operaci
P(s)⇒[await s > 0; s = s - 1] - pro operaci
V(s)⇒[s = s + 1]
Použití
- obecně pro synchronizaci (řešení problému kritické sekce)
- dají se pomocí nich implementovat bariéry