Semaphore vs Monitor
Semaphore er en datastruktur, der bruges til at sikre, at flere processer ikke får adgang til en fælles ressource eller et kritisk afsnit på samme tid i parallelle programmeringsmiljøer. Semaforer bruges til at undgå døde låse og racerforhold. Monitor er et programmeringssprogskonstrukt, der også bruges til at undgå flere processer, der får adgang til en fælles ressource på samme tid, og garanterer derfor gensidig udelukkelse. Monitorer bruger betingede variabler for at opnå denne opgave.
Hvad er en semafor?
Semaphore er en datastruktur, der bruges til at give gensidig udelukkelse til kritiske sektioner. Semaforer understøtter hovedsageligt to operationer kaldet vent (historisk kendt som P) og signal (historisk kendt som V). Vent-operationen blokerer en proces, indtil semaforen er åben, og signaloperationen tillader en anden proces (tråd) at komme ind. Hver semafor er forbundet med en kø med venteprocesser. Når ventefunktionen kaldes af en tråd, kan semaforen være åben, hvis semaforen er åben. Hvis semaforen er lukket, når ventetiden kaldes af en tråd, blokeres tråden, og den skal vente i køen. Signaloperationen åbner en semafor, og hvis der allerede er en tråd, der venter i køen, tillades denne proces at fortsætte, og hvis der ikke er nogen tråde, der venter i køen, huskes signalet for de næste tråde. Der er to typer semaforer kaldet mutex semaforer og tæller semaforer. Mutex semaforer tillader en enkelt adgang til en ressource, og tælling af semaforer tillader flere tråde at få adgang til en ressource (som har flere enheder til rådighed).
Hvad er en skærm?
En skærm er et programmeringssprogskonstrukt, der bruges til at kontrollere adgangen til delte data. Monitorer indkapsler delte datastrukturer, procedurer (der fungerer på delte datastrukturer) og synkronisering mellem samtidige procedureankaldelser. En skærm sørger for, at dens data ikke står over for ustrukturerede adganger og garanterer, at slidbaner (som får adgang til monitorens data gennem dens procedurer) interagerer på en legitim måde. En skærm garanterer gensidig udelukkelse ved kun at tillade en tråd at udføre enhver monitorprocedure på et givet tidspunkt. Hvis en anden tråd forsøger at påkalde en metode på skærmen, mens en tråd allerede udfører en procedure på skærmen, blokeres den anden procedure, og den skal vente i køen. Der er to typer skærme, der hedder Hoare-skærme og Mesa-skærme. De adskiller sig hovedsageligt i deres planlægningssemantik.
Hvad er forskellen mellem Semaphore og Monitor?
Selvom både semaforer og skærme bruges til at opnå gensidig udelukkelse i parallelle programmeringsmiljøer, er de forskellige i teknikkerne, der bruges til at opnå denne opgave. På skærme er koden, der bruges til at opnå gensidig ekskludering, ét sted og er mere struktureret, mens kode for semaforer distribueres som vent- og signalfunktionsopkald. Det er også meget let at lave fejl, når man implementerer semaforer, mens der er en meget lille chance for at begå fejl, når man implementerer skærme. Desuden bruger skærme tilstandsvariabler, mens semaforer ikke gør det.