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.