Szemafor (programozás) – Wikipédia

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.