Semaphore proti Mutexu
Semaphore je struktura podatkov, ki se uporablja za zagotovitev, da več postopkov ne dostopa do skupnega vira ali kritičnega odseka hkrati v vzporednih programskih okoljih. Semafore se uporabljajo za preprečevanje mrtvih ključavnic in dirkaških razmer. Mutex (objekt medsebojne izključitve) se uporablja tudi za izogibanje dostopa do skupnega vira hkrati z več sočasnimi procesi.
Kaj je semafor?
Semafor je struktura podatkov, ki se uporablja za zagotavljanje medsebojne izključenosti kritičnih odsekov. Semafore večinoma podpirajo dve operaciji, imenovani čakanje (zgodovinsko znano kot P) in signal (zgodovinsko znana kot V). Operacija čakanja blokira postopek, dokler semafor ni odprt in signalno delovanje dovoli vstop drugemu postopku (nit). Vsak semafor je povezan s čakalno vrsto čakalnih procesov. Ko operacijo čakanja pokliče nit, če je semafor odprt, se lahko nit nadaljuje. Če je semafor zaprt, ko operacijo čakanja pokliče nit, je nit blokirana in mora čakati v čakalni vrsti. Operacija signala odpre semafor in če v čakalni vrsti že čaka nit, se lahko ta postopek nadaljuje in če v čakalni vrsti ni niti niti, ki čaka v čakalni vrsti, se signal zapomni za naslednje niti. Obstajata dve vrsti semafor, ki se imenujejo mutex semafori in štetje semafor. Mutex semaforji omogočajo en sam dostop do vira, štetje semafor pa omogočajo dostop do vira več niti (ki ima na voljo več enot).
Kaj je Mutex?
Ko se zažene računalniška aplikacija, ustvari mutex in ga pritrdi na vir. Ko vir uporablja nit, je zaklenjen, drugi niti pa ga ne morejo uporabljati. Če želi ena nit uporabiti isti vir, bo morala vložiti zahtevo. Nato bo ta nit postavljena v čakalno vrsto, dokler prva nit ne bo končana z virom. Ko je prva nit končana z virom, se zaklepanje odstrani in nit, ki čaka v čakalni vrsti, lahko dobi dostop do vira. Če v čakalni vrsti čaka več niti, se jim omogoči dostop z vrtenjem. Ko bo mutex dostop do vira izmenično preusmeril med več niti, bo to razvidno, saj več niti hkrati porablja vir. Toda znotraj vira v določenem času dostopa samo en sam nit.
Kakšna je razlika med Semaphore in Mutexom?
Kljub temu, da se semaforji in predmeti mutex uporabljajo za medsebojno izključitev v vzporednih programskih okoljih, imajo nekatere razlike. Predmet mutex omogoča, da posamezen nit porabi vir ali kritični odsek, medtem ko semaforji omogočajo omejeno število hkratnih dostopov do vira (pod največjim dovoljenim številom). S predmeti mutex morajo druge niti, ki želijo dostopati do vira, počakati v čakalni vrsti, dokler trenutna nit ne bo končana z uporabo vira.