Semaphore vs Monitor
Semaphore er en datastruktur som brukes til å sikre at flere prosesser ikke får tilgang til en felles ressurs eller en kritisk seksjon samtidig, i parallelle programmeringsmiljøer. Semaforer brukes til å unngå dødlås og løpsforhold. Monitor er en programmeringsspråkkonstruksjon som også brukes til å unngå at flere prosesser får tilgang til en felles ressurs samtidig, og garanterer derfor gjensidig ekskludering. Skjermer bruker betingede variabler for å oppnå denne oppgaven.
Hva er en semafor?
Semaphore er en datastruktur som brukes til å gi gjensidig utelukkelse av kritiske seksjoner. Semaforer støtter hovedsakelig to operasjoner som kalles vent (historisk kjent som P) og signal (historisk kjent som V). Ventetiden blokkerer en prosess til semaforen er åpen og signaloperasjonen tillater at en annen prosess (tråd) kommer inn. Hver semafor er assosiert med en kø med venteprosesser. Når ventetiden kalles av en tråd, kan tråden fortsette hvis semaforen er åpen. Hvis semaforen er lukket når ventetiden kalles av en tråd, blokkeres tråden og den må vente i køen. Signaloperasjonen åpner en semafor, og hvis det allerede er en tråd som venter i køen, får prosessen fortsette, og hvis det ikke er noen tråder som venter i køen, huskes signalet for de neste trådene. Det er to typer semaforer kalt mutex semaforer og teller semaforer. Mutex-semaforer tillater en enkelt tilgang til en ressurs, og teller semaforer gir flere tråder tilgang til en ressurs (som har flere tilgjengelige enheter).
Hva er en skjerm?
En skjerm er en programmeringsspråkkonstruksjon som brukes til å kontrollere tilgangen til delte data. Skjermer innkapsler delte datastrukturer, prosedyrer (som fungerer på delte datastrukturer) og synkronisering mellom samtidige prosedyreanrop. En skjerm sørger for at dataene ikke blir møtt med ustrukturert tilgang og garanterer at trinn (som får tilgang til skjermens data gjennom prosedyrene) samhandler på en legitim måte. En skjerm garanterer gjensidig utelukkelse ved å la bare en tråd utføre en skjermprosedyre på et gitt tidspunkt. Hvis en annen tråd prøver å påkalle en metode i skjermen, mens en tråd allerede utfører en prosedyre i skjermen, blir den andre prosedyren blokkert og den må vente i køen. Det er to typer skjermer som heter Hoare-skjermer og Mesa-skjermer. De skiller seg hovedsakelig i planleggingssemantikken.
Hva er forskjellen mellom Semaphore og Monitor?
Selv om både semaforene og monitorene brukes til å oppnå gjensidig ekskludering i parallelle programmeringsmiljøer, skiller de seg fra hverandre i teknikkene som brukes for å oppnå denne oppgaven. I skjermer er koden som brukes til å oppnå gjensidig ekskludering på ett sted og er mer strukturert, mens kode for semaforer distribueres som vent- og signalfunksjonsanrop. Det er også veldig enkelt å gjøre feil når man implementerer semaforer, mens det er veldig liten sjanse for å gjøre feil når man implementerer skjermer. Videre bruker skjermer tilstandsvariabler, mens semaforer ikke gjør det.