Semaforo (programazioa)

Semaforoa, programazioan, prozesu ezberdinei errekurtso partekatuetara sarrera onartu edo ukatzen dieten metodoa ahalbidetzen duen aldagaia (edo datu mota abstraktua) da.

Semaforoa erabiltzen hasteko errekurtsoaren aldibereko erabilpen kopurua finkatu behar da, eta horren arabera, semaforo aldagaia hasieratuko da.

Aldibereko prozesu kopuruaren arabera bi semaforo mota ezberdin erabil daitezke: binarioak edo zenbagarriak.
Lehenak errekurtsora aldibereko sarrera bakarra onartzen du. Bigarrenak aldiz, sarrera anitz onartzen ditu, eta semaforo aldagaiaren hasieraketan definituko da kopuru hori.

Eragiketak 
Semaforo aldagia baldintza hauen arabera aldatzen da:

S semáforo aldagaia v balio oso batez hasieratuko da
 Inicia(Semaforoa s, Osoa v)
 {
   s = v;
 }

Aldagaiaren balioa 0 baino handiagoa bada, aldagaiaren balioa gutxitu, bestela, deia egin duen prozesuaren exekuzioa blokeatu eta itxarote aktiboan egongo da.
 P(Semaforoa s)
 {
   if(s>0)  
       s = s-1;  
   else
       wait();
 }

Prozesu blokeaturik ezbadago, aldagaiari balio bat gehitu. Aldiz, blokeaturiko prozesurik badago signal funtzioaren bitartez, wait-ean dauden prozesuei deia egin (esnatu)
 V(Semaforoa s)
 {
    if(!prozesu_blokeatuak)
         s = s+1;  
    else
         signal(); 
 }

Erabilpenak 
Semaforoak programaren sekzio kritikoa babesteko erabiltzen dira. Hasieratutako balioaren arabera, prozesu gehiago edo gutxiagok izango dute aldibereko sarrera-baimena.

Semaforo mota sinpleena binarioa da, eta 1 eta 0 balioak har ditzake soilik. Prozesu bakar bat sar daitekenean baino ez da erabiltzen eta bi balio hauekin sarrera irekita edo itxita dagoen adierazten da (1 balioaz hasieratzen da = irekita). Beraz, errekurtso bat libre dagoenan prozesu bat sartu eta semaforoaren balioa 0ra jartzen du P funtzioaren bitartez. Honekin, beste prozesu bat sartzen saiatzean balioa 0ra ikusi eta itxarote aktiboan sartuko da. Behin hasierako prozesuak amaitzean, V metodoaren bitartez balioa 1era igo eta itxaroten zeuden prozesuei paso emango die.

N prozesuk batera exekutatu ahal izateko, Nz hasieratutako semaforo bat erabiltzen da. Honela, N prozesuek sekzio kritikoa batera erabiltzen dutenean aldagaia 0ra egongo da eta sarrera blokeatuko da, gainontzean, prozesuak sartu ahala sarrerak gutxitzen joango dira (s--) eta irtetzen doazen neurrian sarrerak gehitzen (s++)

Erabilpen motak 
Semaforoak helburu ezberdinetarako erabil daitezke:
 Mutex-ak
 Hesiak
 N hariei (threads) errekurtsora aldibereko sarrera ahalbidetzeko, semaforoa N-ra hasieratuz

Kanpo estekak 

Programazio konkurrentea
Konputazio paraleloa