Semaphore proti Monitorju
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. Monitor je konstrukt programskega jezika, ki se uporablja tudi za izogibanje več postopkom dostopa do skupnega vira, hkrati pa zagotavlja medsebojno izključitev. Za dosego te naloge monitorji uporabljajo pogojne spremenljivke.
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 Monitor?
Monitor je konstrukcija programskega jezika, ki se uporablja za nadzor dostopa do skupnih podatkov. Monitorji zajemajo skupne podatkovne strukture, postopke (ki delujejo na skupnih podatkovnih strukturah) in sinhronizacijo med sočasnimi prikliki postopkov. Monitor zagotavlja, da njegovi podatki niso kos nestrukturiranim dostopom, in jamči, da so tekalne plasti (ki dostopajo do podatkov monitorja prek svojih postopkov) zakonito vplivale. Monitor jamči za medsebojno izključitev, saj omogoča samo en nit, da izvede kateri koli postopek spremljanja v določenem času. Če poskuša druga nit sprožiti metodo v monitorju, medtem ko nit že izvaja postopek v monitorju, je drugi postopek blokiran in mora počakati v čakalni vrsti. Obstajata dve vrsti monitorjev z imenom monitorji Hoare in monitorji Mesa. Razlikujejo se predvsem po semantiki načrtovanja.
Kakšna je razlika med Semaphore in Monitorjem?
Čeprav se semaforji in monitorji uporabljajo za medsebojno izključitev v vzporednih programskih okoljih, se razlikujejo v tehnikah, ki se uporabljajo za dosego te naloge. V monitorjih je koda, ki se uporablja za medsebojno izključitev, na enem mestu in je bolj strukturirana, medtem ko se koda za semafore razdeli med čakajoče in signalne klice. Prav tako je zelo enostavno narediti napake pri izvajanju semafor, medtem ko obstaja zelo malo možnosti za napake pri izvajanju monitorjev. Nadalje monitorji uporabljajo spremenljivke stanja, medtem ko semafore ne.