Semafori vs. näyttö
Semafori on tietorakenne, jota käytetään varmistamaan, että useat prosessit eivät käytä yhteistä resurssia tai kriittistä osaa samanaikaisesti rinnakkaisissa ohjelmointiympäristöissä. Semaforeja käytetään estämään kuolleet lukot ja kilpailuolosuhteet. Monitor on ohjelmointikielirakenne, jota käytetään myös estämään useiden prosessien pääsy yhteiseen resurssiin samanaikaisesti, joten se takaa molemminpuolisen poissulkemisen. Monitorit käyttävät ehdollisia muuttujia tämän tehtävän saavuttamiseksi.
Mikä on semafori?
Semafori on tietorakenne, jota käytetään kriittisten osien vastavuoroiseen poissulkemiseen. Semaforit tukevat pääasiassa kahta operaatiota, joita kutsutaan odotukseksi (historiallisesti P) ja signaaliksi (tunnetaan historiallisesti nimellä V). Odotustoiminto estää prosessin, kunnes semafori on auki ja signaalitoiminto sallii toisen prosessin (säikeen) saapumisen. Jokainen semafori liittyy odotusprosessien jonoon. Kun lanka kutsuu odotusoperaatiota, jos semafori on auki, säiettä voi jatkaa. Jos semafori suljetaan, kun lanka kutsuu odotusoperaatiota, säiettä on estetty ja sen on odotettava jonossa. Signaalioperaatio avaa semaforin ja jos jonossa on jo odottamassa säiettä, prosessi saa edetä ja jos jonossa ei ole yhtään lankaa odottamassa, signaali muistetaan seuraaville säikeille. On olemassa kahdenlaisia semaforeja, joita kutsutaan mutex-semaforeiksi ja laskentasemaforeiksi. Mutex-semaforit mahdollistavat yhden pääsyn resurssiin ja laskentasemaforit mahdollistavat useiden säikeiden pääsyn resurssiin (jossa on useita yksiköitä).
Mikä on näyttö?
Näyttö on ohjelmointikielen rakenne, jota käytetään ohjaamaan pääsyä jaettuun tietoon. Monitorit kapseloivat jaettuja tietorakenteita, proseduureja (jotka toimivat jaetuilla tietorakenteilla) ja synkronoinnin samanaikaisten proseduurikutsujen välillä. Monitori varmistaa, että sen tietoihin ei kohdistu strukturoimattomia pääsyjä, ja takaa, että askelmat (jotka pääsevät monitorin tietoihin toimintojensa kautta) ovat vuorovaikutuksessa laillisella tavalla. Monitori takaa vastavuoroisen poissulkemisen sallimalla vain yhden säikeen suorittaa minkä tahansa valvontatoimenpiteen tiettynä aikana. Jos toinen säie yrittää kutsua menetelmää näytössä, kun säie on jo suorittamassa toimintoa näytössä, toinen toiminto estetään ja sen on odotettava jonossa. On olemassa kahden tyyppisiä näyttöjä, nimeltään Hoare-näytöt ja Mesa-näytöt. Ne eroavat pääasiassa aikataulusemantiikan suhteen.
Mitä eroa on semaforilla ja näytöllä?
Vaikka sekä semaforeja että monitoreja käytetään saavuttamaan vastavuoroinen poissulkeminen rinnakkaisissa ohjelmointiympäristöissä, ne eroavat tämän tehtävän suorittamiseen käytetyistä tekniikoista. Monitoreissa keskinäisen poissulkemisen saavuttamiseen käytettävä koodi on yhdessä paikassa ja on jäsennellympi, kun taas semaforien koodi jaetaan odotus- ja signaalitoimintokutsuina. Semaforeja toteutettaessa on myös erittäin helppo tehdä virheitä, kun taas monitoreja toteutettaessa virheiden tekeminen on hyvin vähäistä. Lisäksi monitorit käyttävät ehtomuuttujia, kun taas semaforit eivät.