Semafor vs Monitor
Semafor on andmestruktuur, mida kasutatakse veendumaks, et mitu protsessi ei pääse paralleelsetes programmeerimiskeskkondades korraga juurde ühisele ressursile või kriitilisele lõigule. Surmatud lukkude ja võistlustingimuste vältimiseks kasutatakse semafoore. Monitor on programmeerimiskeelekonstruktsioon, mida kasutatakse ka selleks, et vältida mitme protsessi samaaegset juurdepääsu ühisele ressursile, seega tagab vastastikune välistamine. Monitorid kasutavad selle ülesande saavutamiseks tingimuslikke muutujaid.
Mis on semafor?
Semafor on andmestruktuur, mida kasutatakse kriitiliste lõikude vastastikuse välistamise tagamiseks. Semafoorid toetavad peamiselt kahte operatsiooni, mida nimetatakse ootamiseks (ajalooliselt tuntud kui P) ja signaaliks (ajalooliselt tuntud kui V). Ooteoperatsioon blokeerib protsessi, kuni semafor on avatud ja signaalitoiming võimaldab siseneda uude protsessi (lõime). Iga semafor on seotud ooteprotsesside järjekorraga. Kui ooteoperatsiooni kutsub lõim, siis kui semafor on avatud, saab lõime jätkata. Kui semafor suletakse, kui ootamisoperatsioon kutsub lõime, siis niit blokeeritakse ja see peab järjekorras ootama. Signaalitoiming avab semafori ja kui järjekorras juba ootab niit, siis lastakse sellel protsessil jätkata ja kui järjekorras pole ühtegi lõime, siis jääb signaal meelde järgmiste lõimede jaoks. Seal on kahte tüüpi semafoore, mida nimetatakse mutex semafoorideks ja loendavate semafoorideks. Mutexi semafoorid võimaldavad ressursile ühe juurdepääsu ja semafooride loendamine võimaldab ressurssidele juurde pääseda mitmel niidil (millel on mitu ühikut).
Mis on monitor??
Monitor on programmeerimiskeele konstruktsioon, mida kasutatakse juurdepääsu jagatud andmetele juhtimiseks. Monitorid kapseldavad jagatud andmestruktuurid, protseduurid (mis töötavad ühistel andmestruktuuridel) ja samaaegsete protseduuride kutsumiste sünkroonimine. Monitor tagab, et tema andmetel pole struktureerimata juurdepääsu ja tagab, et turvised (kes oma protseduuride kaudu pääsevad monitori andmetele juurde) seaduslikul viisil. Monitor tagab vastastikuse välistamise, lubades monitori protseduure teatud aja jooksul teostada ainult ühel keermel. Kui mõni teine niit proovib monitoris meetodit kutsuda, kui niit juba monitoris protseduuri täidab, blokeeritakse teine protseduur ja see peab järjekorras ootama. On kahte tüüpi monitorid, mida nimetatakse Hoare monitorideks ja Mesa monitorideks. Need erinevad peamiselt ajakava semantika poolest.
Mis vahe on Semaforil ja Monitoril??
Ehkki paralleelsetes programmeerimiskeskkondades kasutatakse vastastikuse tõrjutuse saavutamiseks nii semafoore kui ka kuvarit, erinevad nad selle ülesande saavutamiseks kasutatud tehnikast. Monitorides on vastastikuse välistamise saavutamiseks kasutatav kood ühes kohas ja rohkem struktureeritud, samas kui semafooride kood jaotatakse ootamis- ja signaalifunktsiooni kõnedena. Samuti on semafooride rakendamisel väga lihtne vigu teha, kuvarite juurutamisel on aga väga väike võimalus eksida. Lisaks kasutavad monitorid tingimuste muutujaid, semafoorid aga mitte.