Semafor (računarstvo)

Izvor: Wikipedia

Semafor u računarstvu označava objekat koji kontroliše pristup određenim resursima, tako što oslikava stanje raspoloživosti resursa, obično jednom celobrojnom vrednošću. Ovaj koncept se najčešće koristi u programiranju kada postoji više procesa ili niti koje koriste iste resurse, radi sinhronizacije.

Semafor je nenegativna celobrojna promenljiva nad kojom se, osim inicijalizacije, mogu izvršiti sledeće operacije:

  • operacija zahtevanja jedinice resursa. Ukoliko su resursi smesta dostupni, odnosno ako je vrednost semafora veća od nule, operacija se momentalno okončava i vrednost semafora se umanjuje za 1, da bi oslikala da je jedna više jedinica resursa zauzeta. Ukoliko je vrednost semafora jednaka nuli, to znači da nijedna jedinica resursa nije raspoloživa u tom trenutku te sledi faza čekanja, tj. blokiranja. Kada resursi postanu raspoloživi, tj. kada vrednost semafora postane veća od nule, tada se ona automatski umanjuje za 1 i proces blokiranja se završava.
  • operacija signaliziranja semaforu da dati proces oslobađa jedinicu resursa. Vrednost semafora se povećava za 1, i bilo koji proces koji je bio u stanju čekanja prestaje sa čekanjem i dobija jedinicu resursa.

Semafori mogu imati vrednost 0 ili 1 (resursi nisu raspoloživi ili resursi jesu raspoloživi), ali mogu imati i vrednosti 0, 1, 2, ... (resursi nisu raspoloživi ili toliko-i-toliko jedinica resursa jeste raspoloživo).

Semafori mogu biti implementirani na nivou samog operativnog sistema (kao što je slučaj sa SVR4 semaforima iz skupa objekata za podršku međuprocesne komunikacije), na nivou određene platforme (kao što je slučaj sa muteksima u raznim bibliotekama za rad sa nitima, npr. Posiks), ali mogu biti i transparentni i korišćeni putem određenih ključnih reči kao što je to slučaj sa Javinom ključnom rečju synchronized kojom se obezbeđuje sinhronizovan pristup resursima objekta neke klase.