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 en kritisk sektion på samme tid i parallelle programmeringsmiljøer. Semaforer bruges til at undgå dead locks og race forhold. Mutex (Mutual Exclusion Object) bruges også til at undgå adgang til en fælles ressource på samme tid ved flere samtidige processer.
Hvad er en semafor?
Semaphore er en datastruktur, der bruges til at give gensidig udelukkelse af kritiske sektioner. Semaforer understøtter hovedsageligt to operationer kaldet vente (historisk kendt som P) og signal (historisk kendt som V). Venteoperationen 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ø af ventende processer. Når venteoperationen kaldes af en tråd, hvis semaforen er åben, kan tråden fortsætte. Hvis semaforen lukkes, når venteoperationen kaldes af en tråd, er tråden blokeret, og den må vente i køen. Signaloperationen åbner en semafor, og hvis der allerede er en tråd, der venter i køen, får den proces lov til 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ælle semaforer. Mutex semaforer tillader en enkelt adgang til en ressource, og tælle semaforer tillader flere tråde at få adgang til en ressource (som har flere tilgængelige enheder).
Hvad er en Mutex?
Når en computerapplikation startes, vil den oprette en mutex og knytte 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, bliver den nødt til at lave en anmodning. Derefter vil den tråd blive placeret 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 tråden, 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å roterende basis. Praktisk t alt, når mutex'en 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 har kun en enkelt tråd adgang til ressourcen på et givet tidspunkt.
Hvad er forskellen mellem Semaphore og Mutex?
Selv om både semaforerne og mutex-objekterne bruges til at opnå gensidig udelukkelse i parallelle programmeringsmiljøer, har de nogle forskelle. Et mutex-objekt tillader kun en enkelt tråd at forbruge en ressource eller en kritisk sektion, hvorimod semaforer tillader et begrænset antal samtidige adgange til en ressource (under et maksim alt tilladt antal). Med mutex-objekter skal andre tråde, der ønsker at få adgang til ressourcen, vente i en kø, indtil den aktuelle tråd er færdig med at bruge ressourcen.