Semaphore vs Mutex
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øde låser og løpevilkår. Mutex (Mutual Exclusion Object) brukes også til å unngå tilgang til en felles ressurs samtidig ved flere samtidige prosesser.
Hva er en Semaphore?
Semaphore er en datastruktur som brukes til å gi gjensidig utestenging til kritiske seksjoner. Semaforer støtter hovedsakelig to operasjoner kalt ventetid (historisk kjent som P) og signal (historisk kjent som V). Vent-operasjonen blokkerer en prosess til semaforen er åpen og signaloperasjonen tillater en annen prosess (tråd) å gå inn. Hver semafor er knyttet til en kø av venteprosesser. Når ventetjenesten kalles av en tråd, hvis semaforen er åpen, kan tråden fortsette. Hvis semaforen er stengt når ventetiden er kalt av en tråd, er tråden blokkert, og den må vente i køen. Signaloperasjonen åpner en semafor, og hvis det er en tråd som allerede venter i køen, kan denne prosessen fortsette, og hvis det ikke er noen tråder som venter i køen, blir signalet husket 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 telle semaforer tillater flere tråder å få tilgang til en ressurs (som har flere enheter tilgjengelig).
Hva er en Mutex?
Når et dataprogram er startet, vil det opprette en mutex og legge den til en ressurs. Når ressursen brukes av en tråd, er den låst og andre tråder kan ikke bruke den. Hvis en annen tråd vil bruke den samme ressursen, må den gjøre en forespørsel. Da blir den tråden plassert i en kø til den første tråden er ferdig med ressursen. Når den første tråden er ferdig med ressursen, vil låsingen bli fjernet, og tråden som venter i køen, kan få tilgang til ressursen. Hvis det er flere tråder som venter i køen, får de tilgang på roterende grunnlag. Nesten når mutex veksler tilgangen til en ressurs mellom flere tråder, vil den bli synlig ettersom flere tråder bruker en ressurs samtidig. Men internt er det bare en enkelt tråd som får tilgang til ressursen på et gitt tidspunkt.
Hva er forskjellen mellom Semaphore og Mutex?
Selv om både semaforene og mutexobjektene brukes til å oppnå gjensidig utestenging i parallelle programmeringsmiljøer, har de noen forskjeller. En mutex-gjenstand tillater bare en enkelt tråd å forbruke en ressurs eller en kritisk seksjon, mens semaforer tillater et begrenset antall samtidige tilgang til en ressurs (under et maksimalt tillatt nummer). Med mutexobjekter må andre tråder som ønsker å få tilgang til ressursen, vente i en kø, til den gjeldende tråden er ferdig ved hjelp av ressursen.