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, kuri naudojama siekiant užtikrinti, kad keli procesai lygiagrečioje programavimo aplinkoje nepasiektų bendro ištekliaus ar svarbios dalies tuo pačiu metu. 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 šiai užduočiai atlikti naudoja sąlyginius kintamuosius.

Kas yra semaforas?

Semaforas yra duomenų struktūra, naudojama siekiant užtikrinti abipusį kritinių skyrių išskyrimą. Semaforai daugiausia palaiko dvi operacijas, vadinamas laukimu (istoriškai žinomas kaip P) ir signalą (istoriškai žinomas kaip V). Laukimo operacija blokuoja procesą, kol bus atidarytas semaforas, o signalo operacija leidžia įeiti kitam procesui (gijai). Kiekvienas semaforas yra susietas su laukiančių procesų eile. Kai laukimo operacija iškviečiama gija, jei semaforas atidarytas, giją galima tęsti. Jei semaforas uždaromas, kai gija iškviečia laukimo operaciją, gija užblokuojama ir ji turi laukti eilėje. Signalo operacija atidaro semaforą ir jei eilėje jau laukia gija, tam procesui leidžiama tęstis ir jei eilėje nėra laukiančių gijų, signalas įsimenamas kitoms gijomis. Yra dviejų tipų semaforai, vadinami mutex semaforais ir skaičiavimo semaforais. „Mutex“semaforai leidžia vieną kartą pasiekti š altinį, o skaičiuojant semaforus kelioms gijomis prieiti prie š altinio (kuris turi keletą galimų vienetų).

Kas yra monitorius?

Monitorius yra programavimo kalbos konstrukcija, naudojama prieigai prie bendrinamų duomenų valdyti. Monitoriai apima bendras duomenų struktūras, procedūras (kurias veikia bendromis duomenų struktūromis) ir sinchronizavimą tarp lygiagrečių procedūrų iškvietimų. Monitorius užtikrina, kad jo duomenys nesusidurtų su nestruktūrizuotomis prieigomis, ir garantuoja, kad pakopos (kurios per procedūras pasiekia monitoriaus duomenis) sąveikauja teisėtai. Monitorius garantuoja abipusį pašalinimą, leisdamas tik vienai gijai atlikti bet kurią stebėjimo procedūrą 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, vadinami Hoare monitoriais ir Mesa monitoriais. Jie daugiausia skiriasi savo planavimo semantika.

Kuo skiriasi semaforas ir monitorius?

Nors ir semaforai, ir monitoriai naudojami abipusei atskirčiai lygiagrečiose programavimo aplinkose, jie skiriasi šiai užduočiai atlikti naudojamais metodais. Monitoriuose kodas, kuris naudojamas abipusei atskirčiai pasiekti, yra vienoje vietoje ir yra labiau struktūrizuotas, o semaforų kodas paskirstomas kaip laukimo ir signalo funkcijos iškvietimai. Taip pat labai lengva suklysti diegiant semaforus, tuo tarpu diegiant monitorius yra labai mažai galimybių suklysti. Be to, monitoriai naudoja sąlygų kintamuosius, o semaforai ne.

Rekomenduojamas: