Skirtumas Tarp Semaforo Ir Monitoriaus

Skirtumas Tarp Semaforo Ir Monitoriaus
Skirtumas Tarp Semaforo Ir Monitoriaus

Video: Skirtumas Tarp Semaforo Ir Monitoriaus

Video: Skirtumas Tarp Semaforo Ir Monitoriaus
Video: ЛИТВИНУ ОТВЕШАЛИ ХОРОШЕГО ЛЕЩА 2024, Lapkritis
Anonim

Semaforas prieš monitorių

Semaforas yra duomenų struktūra, naudojama norint įsitikinti, kad keli procesai tuo pačiu metu nepasiekia bendro šaltinio ar kritinio skyriaus lygiagrečioje programavimo aplinkoje. Semaforai naudojami norint išvengti negyvų spynų ir lenktynių sąlygų. Monitorius yra programavimo kalbos konstrukcija, kuri taip pat naudojama siekiant išvengti kelių procesų, vienu metu pasiekiančių bendrą šaltinį, todėl garantuoja abipusę atskirtį. Šiai užduočiai atlikti monitoriai naudoja sąlyginius kintamuosius.

Kas yra semaforas?

Semaforas yra duomenų struktūra, naudojama abipusiam kritinių skyrių išskyrimui. Semaforai daugiausia palaiko dvi operacijas, vadinamas laukimu (istoriškai žinomas kaip P) ir signalu (istoriškai žinomas kaip V). Laukimo operacija blokuoja procesą, kol semaforas bus atidarytas, o signalo operacija leis patekti į kitą procesą (giją). Kiekviena semaforas siejamas su laukimo procesų eile. Kai laukimo operaciją iškviečia gija, jei semaforas yra atidarytas, gija gali tęstis. Jei semaforas uždaromas, kai laukimo operacija yra iškviečiama gija, gija yra užblokuota ir ji turi laukti eilėje. Signalo operacija atidaro semaforą ir, jei eilėje jau laukia gija, šiam procesui leidžiama tęsti, o jei eilėje nėra laukiančių gijų, signalas atsimenamas kitoms gijoms. Yra dviejų tipų semaforos, vadinamos mutex semaforomis ir skaičiuojančios semaforas. „Mutex“semaforos suteikia vieną prieigą prie ištekliaus, o skaičiuojant semaforas - kelios gijos - prieigą prie šaltinio (kuriame yra keli galimi vienetai).

Kas yra monitorius?

Monitorius yra programavimo kalbos konstrukcija, naudojama prieigai prie bendrinamų duomenų valdyti. Monitoriai sujungia bendrų duomenų struktūras, procedūras (kurios veikia bendrose duomenų struktūrose) ir sinchronizavimą tarp tuo pačiu metu atliekamų procedūrų iškvietimų. Monitorius užtikrina, kad jo duomenys nebūtų nestruktūruoti, ir garantuoja, kad protektoriai (kurie prieina monitoriaus duomenis naudodamiesi savo procedūromis) sąveikauja teisėtai. Monitorius garantuoja abipusį išskyrimą, leidžiant bet kurią monitoriaus procedūrą tam tikru metu atlikti tik vienai gijai. Jei kita gija bando iškviesti metodą monitoriuje, o gija jau vykdo procedūrą monitoriuje, tada antroji procedūra yra užblokuota ir ji turi laukti eilėje. Yra dviejų tipų monitoriai, pavadinti „Hoare“monitoriais ir „Mesa“monitoriais. Jie daugiausia skiriasi savo planavimo semantika.

Kuo skiriasi semaforas ir monitorius?

Nors tiek semaforai, tiek monitoriai naudojami norint pasiekti abipusę atskirtį lygiagrečioje programavimo aplinkoje, jie skiriasi metodais, naudojamais šiai užduočiai pasiekti. Monitoriuose kodas, naudojamas abipusiam išskyrimui pasiekti, yra vienoje vietoje ir yra labiau struktūrizuotas, o semaforų kodas platinamas kaip laukimo ir signalo funkcijos iškvietimai. Be to, diegiant semaforas yra labai lengva padaryti klaidų, tuo tarpu diegiant monitorius yra labai mažai galimybių suklysti. Be to, monitoriai naudoja sąlygų kintamuosius, o semaforai - ne.

Rekomenduojama: