Semaforas vs monitorius
Semaforas yra duomenų struktūra, naudojama užtikrinti, kad keli procesai nepatektų prie bendro šaltinio ar kritinio skyriaus tuo pačiu metu, lygiagrečiose programavimo aplinkose. Semaforai naudojami siekiant išvengti negyvų spynų ir lenktynių sąlygų. Monitorius yra programavimo kalbos konstrukcija, kuri taip pat naudojama siekiant išvengti kelių procesų prieigos prie bendro šaltinio tuo pačiu metu, todėl garantuoja abipusę atskirtį. Monitoriai naudoja sąlyginius kintamuosius šiai užduočiai pasiekti.
Kas yra semaforas?
Semaforas yra duomenų struktūra, naudojama abipusiam kritinių skyrių atskyrimui užtikrinti. Semaforos daugiausia palaiko dvi operacijas, vadinamas palaukimu (istoriškai žinomu kaip P) ir signalu (istoriškai žinomu kaip V). Laukimo operacija blokuoja procesą, kol atidaromas semaforas, o signalo operacija leidžia patekti kitam procesui (gijai). Kiekvienas semaforas yra susijęs su laukimo procesų eiga. Kai laukimo operacija iškviečiama sriegiu, jei semaforas atidarytas, sriegis gali tęstis. Jei semaforas uždaromas, kai laukimo operacija iškviečiama sriegiu, siūlas užblokuojamas ir jis turi laukti eilėje. Signalo operacija atidaro semaforą ir, jei eilėje jau laukiama gijų, šiam procesui leidžiama tęsti, o jei eilėje nėra siūlų, signalas atsimenamas kitiems gijams. Yra dviejų tipų semaforos, vadinamos mutex semaforomis ir skaičiuojančiomis semaforomis. „Mutex“ semaforos suteikia galimybę vienkartine prieiga prie resurso, o skaičiuojant semaforomis, prieiga prie šaltinio leidžiama kelioms sriegoms (kuriose yra keli vienetai).
Kas yra monitorius?
Monitorius yra programavimo kalbos konstrukcija, naudojama kontroliuoti prieigą prie bendrai naudojamų duomenų. Monitoriai apjungia bendras duomenų struktūras, procedūras (kurios veikia pagal bendras duomenų struktūras) ir sinchronizavimą tarp tuo pačiu metu vykstančių procedūrų. Monitorius įsitikina, kad jo duomenims nėra prieigų prie nestruktūrizuotų prieigų, ir garantuoja, kad pakopos (kurios priima monitoriaus duomenis per savo procedūras) sąveikauja teisėtai. Monitorius garantuoja abipusį atsiribojimą, nes leidžia tik viena gija bet kurią monitoriaus procedūrą atlikti tam tikru metu. Jei kita gija bando iškviesti metodą monitoriuje, o gija jau vykdo procedūrą monitoriuje, tada antroji procedūra užblokuojama ir ji turi laukti eilėje. Yra dviejų tipų monitoriai, pavadinti Hoare monitoriais ir Mesa monitoriais. Jie daugiausia skiriasi planavimo semantika.
Kuo skiriasi „Semaphore“ ir „Monitor“?
Nors ir semaforai, ir monitoriai yra naudojami abipusiam atskirties lygiagrečiam programavimo aplinkai pasiekti, jie skiriasi metodika, naudojama šiai užduočiai pasiekti. Monitoriuose kodas, kuris naudojamas abipusiam atskirtiui pasiekti, yra vienoje vietoje ir yra labiau struktūruotas, o semaforų kodas yra paskirstomas kaip laukimo ir signalo funkcijos skambučiai. Taip pat labai lengva suklysti įgyvendinant semaforus, tuo tarpu labai mažai galimybių suklysti diegiant monitorius. Be to, monitoriai naudoja sąlygų kintamuosius, o semaforai - ne.