Semaphore vs Mutex
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. Mutex (Objekt for gensidig udelukkelse) bruges også til at undgå adgang til en fælles ressource på samme tid af flere samtidige processer.
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 Mutex?
Når et computerprogram startes, opretter det en mutex og knytter den til en ressource. Når ressourcen bruges af en tråd, er den låst, og andre tråde kan ikke bruge den. Hvis en anden tråd ønsker at bruge den samme ressource, skal den indgive en anmodning. Derefter placeres den tråd i en kø, indtil den første tråd er færdig med ressourcen. Når den første tråd er færdig med ressourcen, fjernes låsen, og den tråd, der venter i køen, kan få adgang til ressourcen. Hvis der er flere tråde, der venter i køen, får de adgang på en roterende basis. Når mutex skifter adgangen til en ressource mellem flere tråde, vil den være synlig, da flere tråde bruger en ressource på samme tid. Men internt får kun en enkelt tråd adgang til ressourcen på et givet tidspunkt.
Hvad er forskellen mellem Semaphore og Mutex?
Selvom både semaforer og mutex-objekter bruges til at opnå gensidig ekskludering i parallelle programmeringsmiljøer, har de nogle forskelle. Et mutex-objekt tillader kun en enkelt tråd at forbruge en ressource eller et kritisk afsnit, mens semaforer tillader et begrænset antal samtidige adganger til en ressource (under et maksimalt tilladt antal). Med mutex-objekter skal andre tråde, der vil have adgang til ressourcen, vente i en kø, indtil den aktuelle tråd er færdig med at bruge ressourcen.