Semaphore vs Monitor
Semaphore er en datastruktur som brukes for å sikre at flere prosesser ikke får tilgang til en felles ressurs eller en kritisk seksjon samtidig, i parallelle programmeringsmiljøer. Semaforer brukes for å unngå dødlåser og løpsforhold. Monitor er en programmeringsspråkkonstruksjon som også brukes for å unngå at flere prosesser får tilgang til en felles ressurs samtidig, og garanterer derfor gjensidig ekskludering. Overvåkere bruker betingede variabler for å oppnå denne oppgaven.
Hva er en semafor?
Semaphore er en datastruktur som brukes til å gi gjensidig ekskludering til kritiske seksjoner. Semaforer støtter hovedsakelig to operasjoner k alt vente (historisk kjent som P) og signal (historisk kjent som V). Venteoperasjonen blokkerer en prosess til semaforen er åpen og signaloperasjonen lar en annen prosess (tråd) komme inn. Hver semafor er knyttet til en kø av venteprosesser. Når venteoperasjonen kalles av en tråd, hvis semaforen er åpen, kan tråden fortsette. Hvis semaforen lukkes når venteoperasjonen 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 den 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 k alt mutex semaforer og tellende semaforer. Mutex-semaforer tillater en enkelt tilgang til en ressurs, og tellende semaforer lar flere tråder få tilgang til en ressurs (som har flere tilgjengelige enheter).
Hva er en monitor?
En monitor er en programmeringsspråkkonstruksjon som brukes til å kontrollere tilgang til delte data. Monitorer innkapsler delte datastrukturer, prosedyrer (som opererer på delte datastrukturer) og synkronisering mellom samtidige prosedyreanrop. En overvåker sørger for at dataene ikke blir møtt med ustrukturerte tilganger og garanterer at tråder (som får tilgang til overvåkerens data gjennom prosedyrene) samhandler på en legitim måte. En monitor garanterer gjensidig ekskludering ved å la bare én tråd utføre en hvilken som helst monitorprosedyre på et gitt tidspunkt. Hvis en annen tråd prøver å påkalle en metode i monitoren, mens en tråd allerede utfører en prosedyre i monitoren, blir den andre prosedyren blokkert og den må vente i køen. Det finnes to typer skjermer som heter Hoare-skjermer og Mesa-skjermer. De er hovedsakelig forskjellige 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, er de forskjellige i teknikkene som brukes for å oppnå denne oppgaven. I monitorer er koden som brukes for å oppnå gjensidig ekskludering på ett enkelt sted og er mer strukturert, mens kode for semaforer distribueres som vente- og signalfunksjonsanrop. Dessuten er det veldig lett å gjøre feil når du implementerer semaforer, mens det er en veldig liten sjanse for å gjøre feil når du implementerer monitorer. Videre bruker monitorer tilstandsvariabler, mens semaforer ikke gjør det.