Semafor (synchronizace)
Z Wikipedie, otevřené encyklopedie
Semafor je synchronizační primitivum obsahující celočíselný čítač, který si lze představit například jako počítadlo volných prostředků. Poskytuje atomické operace „up“ a „down“. Operace „down“ sníží čítač o jedničku, v případě, že už je nulový (nedostává se prostředků), se proces zablokuje a přidá do fronty procesů čekajících na daný semafor. Operace „up“ zkontroluje frontu, a v případě, že je neprázdná, vybere jeden proces čekající ve frontě a odblokuje jej (ten pak pokračuje za svou operací „down“); je-li fronta prázdná, zvýší hodnotu čítače o jedničku.
Příklad implementace v pseudokódu:
P(Semaphore s) { očekávej s > 0 then s = s-1; /* musí být atomické jakmile je zjištěno, že s > 0 */ } V(Semaphore s) { s = s+1; /* musí být atomické */ } Init(Semaphore s, Integer v) { s = v; }
Názvy operací P a V jsou tradiční a pochází od Edsgera Dijkstry, který semafory vymyslel. Jsou odvozeny od dánských slov „prolaag“ (složeno z probeer te verlagen, zkus a sniž) a „verhoog“, zvyš.