Szemafor (programozás)
A szemafor a számítógép-programozásban használt változó vagy absztrakt adattípus, amit az osztott erőforrásokhoz való hozzáférések szabályozásához használnak a többszálú környezetekben. Megalkotása Edsger Dijkstra holland matematikusnak, a programozás egyik úttörőjének nevéhez fűződik.
Alapelvek
[szerkesztés]A szemaforokhoz csak néhány atomi alapművelettel lehet hozzáférni (olyan műveletekkel, melyek nem szakíthatók meg). Ezek az alapműveletek a következők:
P(s szemafor) // erőforrás lefoglalása { várj, míg nem igaz, hogy s > 0, akkor s := s-1; /* miután az s > 0 bekövetkezett, a műveletnek atominak kell lennie*/ }
V(s szemafor) // erőforrás felszabadítása { s := s+1; /* atomi műveletnek kell lennie */ }
Init(s szemafor, v egész szám) { s := v; }
A P és V nevek holland nyelvű szavak rövidítései. A P a proberen, kipróbálni, míg a V a verhogen, növelni szóból származik.
Az Init művelet az adott szemafor inicializálását végzi. A P művelet addig várakozik, amíg egy erőforrás el nem érhető, majd amikor az felszabadul, hozzáférést szerez hozzá. A V a P ellenkezője; felszabadít egy erőforrást, aminek használatát a hívó folyamat befejezte. A P és V hívások atomiak; semmilyen más folyamat nem kezdhet bele ezen műveletek végrehajtásába, amely ugyanazon a szemaforon akar egy másik műveletet kezdeni.