Semafor je v kontexte programovania v OS synchronizačný prostriedok,
na riadenie vykonávania skupiny procesov.
Semafor pozostáva z celočíselného počítadla, ktoré môže nadobúdať
nezáporné hodnoty, a sú nad ním definované nasledovné atomické
operácie:
-
čakaj a dekrementuj (wait,
acquire) - operácia, ktorá atomicky zníži
hodnotu semafora o zadaný celočíselný dekrement.
Ak je však hodnota, o ktorú chceme dekrementovať väčšia ako
samotná hodnota semafora, t.j. ak by po dekrementácií bola hodnota
na semafore záporná musí proces vykonávajúci túto operáciu
čakať, až kým iné procesy hodnotu na semafore nezvýšia tak,
aby bola výsledná hodnota nezáporná.
-
inkrementuj (release,
signal) - operácia, ktorá atomicky zvýši
hodnotu semafora o zadaný inkrement. Ak je
výsledná hodnota dostatočná aby niektoré z čakajúcich procesov
mohli spraviť operáciu dekrementácie, tieto procesy môžu pokračovať
vo svojom vykonávaní.
Ak hodnota na semafore nadobúda iba hodnoty 0 a
1 potom je semafor ekvivalentný mutexu:
-
hodnota 0 predstavuje stav zamknutý.
-
hodnota 1 predstavuje stav odomknutý.
-
operácia dekrementácie je ekvivalentná operácií zamkni.
-
operácia inkrementácie je ekvivalentná operácií odomkni.
V unixových systémoch je možné vytvoriť sadu
semaforov, kde každý semafor má vlastnú hodnotu a na semaforoch patriacich
do jednej sady je možné vykonať atomicky viacero operácií.