Semafor vs monitor
Semafor on andmestruktuur, mida kasutatakse selleks, et paralleelsetes programmeerimiskeskkondades ei pääseks mitu protsessi samaaegselt juurde ühisele ressursile või kriitilisele jaotisele. Semafoore kasutatakse surnud lukkude ja võistlustingimuste vältimiseks. Monitor on programmeerimiskeele konstruktsioon, mida kasutatakse ka selleks, et vältida mitme protsessi samaaegset juurdepääsu ühisele ressursile, mis tagab vastastikuse välistamise. Monitorid kasutavad selle ülesande täitmiseks tingimuslikke muutujaid.
Mis on semafor?
Semafor on andmestruktuur, mida kasutatakse kriitiliste sektsioonide vastastikuseks välistamiseks. Semafoorid toetavad peamiselt kahte toimingut, mida nimetatakse ootamiseks (ajalooliselt tuntud kui P) ja signaaliks (ajalooliselt tuntud kui V). Ooteoperatsioon blokeerib protsessi, kuni semafor on avatud ja signaalioperatsioon lubab siseneda teisele protsessile (lõimele). Iga semafor on seotud ooteprotsesside järjekorraga. Kui lõime kutsub ooteoperatsiooni ja semafor on avatud, saab lõime jätkata. Kui semafor suletakse ootetoimingu kutsumisel lõime poolt, blokeeritakse lõim ja see peab ootama järjekorras. Signaalioperatsioon avab semafori ja kui järjekorras on juba ootel lõim, lastakse sellel protsessil edasi minna ja kui järjekorras pole ühtegi lõime, jäetakse signaal meelde järgmiste lõimede jaoks. On kahte tüüpi semafoore, mida nimetatakse mutex semaforideks ja loendussemaforideks. Mutexi semaforid võimaldavad ressursile ühekordset juurdepääsu ja semafooride loendamine võimaldab mitmel lõimel juurdepääsu ressursile (millel on mitu ühikut).
Mis on monitor?
Monitor on programmeerimiskeele konstruktsioon, mida kasutatakse jagatud andmetele juurdepääsu juhtimiseks. Monitorid kapseldavad jagatud andmestruktuure, protseduure (mis töötavad jagatud andmestruktuuridel) ja sünkroonimist samaaegsete protseduuride väljakutsete vahel. Monitor hoolitseb selle eest, et tema andmetele ei tekiks struktureerimata juurdepääsu, ja tagab, et astmed (mis pääsevad monitori andmetele oma protseduuride kaudu) suhtlevad seaduslikult. Monitor tagab vastastikuse välistamise, lubades ainult ühel lõimel teostada mis tahes jälgimisprotseduuri antud ajahetkel. Kui mõni teine lõim proovib monitoris meetodit käivitada, samal ajal kui lõim juba täidab monitoris protseduuri, blokeeritakse teine protseduur ja see peab ootama järjekorras. On kahte tüüpi monitore, mida nimetatakse Hoare monitorideks ja Mesa monitorideks. Need erinevad peamiselt oma ajastamise semantika poolest.
Mis vahe on semaforil ja monitoril?
Kuigi nii semafoore kui ka monitore kasutatakse paralleelsetes programmeerimiskeskkondades vastastikuse välistamise saavutamiseks, erinevad need selle ülesande täitmiseks kasutatavate tehnikate poolest. Monitorides on vastastikuse välistamise saavutamiseks kasutatav kood ühes kohas ja rohkem struktureeritud, samas kui semaforide kood jaotatakse oote- ja signaalifunktsioonikutsetena. Samuti on semaforide rakendamisel väga lihtne vigu teha, samas kui monitoride rakendamisel on vigu väga vähe. Lisaks kasutavad monitorid tingimusmuutujaid, semaforid aga mitte.