Semafor proti monitorju
Semaphore je podatkovna struktura, ki se uporablja za zagotovitev, da več procesov hkrati ne dostopa do skupnega vira ali kritičnega odseka v vzporednih programskih okoljih. Semafori se uporabljajo za preprečevanje mrtvih ključavnic in dirkalnih razmer. Monitor je konstrukcija programskega jezika, ki se uporablja tudi za preprečevanje večkratnega dostopa do skupnega vira hkrati, zato zagotavlja medsebojno izključitev. Monitorji za dosego te naloge uporabljajo pogojne spremenljivke.
Kaj je semafor?
Semafor je podatkovna struktura, ki se uporablja za medsebojno izključitev kritičnih odsekov. Semaforji v glavnem podpirajo dve operaciji, imenovani čakanje (v preteklosti znano kot P) in signal (v preteklosti znano kot V). Čakalna operacija blokira postopek, dokler semafor ni odprt in signalna operacija dovoli vstop drugemu procesu (niti). Vsak semafor je povezan s čakalno vrsto. Ko nit pokliče operacijo čakanja, če je semafor odprt, lahko nit nadaljuje. Če je semafor zaprt, ko nit pokliče operacijo čakanja, je nit blokirana in mora čakati v čakalni vrsti. Operacija signala odpre semafor in če v čakalni vrsti že čaka nit, lahko ta postopek nadaljuje in če v čakalni vrsti ni niti, ki čaka, se signal zapomni za naslednje niti. Obstajata dve vrsti semaforjev, imenovanih mutex semaforji in štetje semaforjev. Mutex semaforji omogočajo en sam dostop do vira, štetje semaforjev pa omogoča več niti do vira (ki ima na voljo več enot).
Kaj je monitor?
Monitor je konstrukcija programskega jezika, ki se uporablja za nadzor dostopa do skupnih podatkov. Monitorji enkapsulirajo skupne podatkovne strukture, postopke (ki delujejo na skupnih podatkovnih strukturah) in sinhronizacijo med sočasnimi klici postopkov. Monitor zagotavlja, da se njegovi podatki ne soočajo z nestrukturiranimi dostopi, in zagotavlja, da tekalne plasti (ki prek svojih postopkov dostopajo do podatkov monitorja) delujejo na legitimen način. Monitor zagotavlja vzajemno izključitev tako, da dovoli samo eni niti, da v danem trenutku izvede kateri koli postopek nadzora. Če druga nit poskuša priklicati metodo v monitorju, medtem ko nit že izvaja postopek na monitorju, je drugi postopek blokiran in mora čakati v čakalni vrsti. Obstajata dve vrsti monitorjev z imenom Hoare monitorji in monitorji Mesa. Razlikujejo se predvsem po semantiki razporejanja.
Kakšna je razlika med Semaphore in Monitor?
Čeprav se semaforji in monitorji uporabljajo za medsebojno izključitev v vzporednih programskih okoljih, se med seboj razlikujejo v tehnikah, uporabljenih za dosego te naloge. V monitorjih je koda, ki se uporablja za doseganje medsebojne izključitve, na enem mestu in je bolj strukturirana, medtem ko se koda za semaforje porazdeli kot čakalni in signalni klic funkcije. Prav tako je zelo enostavno narediti napake pri izvajanju semaforjev, medtem ko je zelo malo možnosti, da naredite napake pri izvajanju monitorjev. Nadalje monitorji uporabljajo spremenljivke pogojev, medtem ko semaforji ne.