Rekommenderas, 2024

Redaktionen

Skillnad mellan Semaphore och Mutex

Processsynkronisering spelar en viktig roll för att upprätthålla konsistensen av delad data. Både mjukvaru- och hårdvarulösningar är närvarande för hantering av kritiska sektionsproblem. Men hårdvarulösningar för kritiska sektionsproblem är ganska svåra att genomföra. I dagens artikel kommer vi att diskutera två mjukvarubaserad lösning för att hantera kritisk sektionsproblem, dvs Semaphore och Mutex.

Den grundläggande skillnaden mellan semafor och mutex är att semaforen är en signalmekanism, dvs processer utföra vänta () och signal () -operationen för att indikera om de förvärvar eller släpper ut resursen, medan Mutex är låsningsmekanism, processen måste förvärva låset på mutex objekt om det vill förvärva resursen. Det finns några fler skillnader mellan semafor och mutex, låt oss diskutera dem med hjälp av jämförelsetabellen som visas nedan.

Jämförelsediagram

Grunder för jämförelseSemaformutex
GrundläggandeSemaphore är en signalmekanism.Mutex är en låsningsmekanism.
ExistensSemaphore är en heltal variabel.Mutex är ett objekt.
FungeraSemaphore tillåter flera programtrådar att få tillgång till en begränsad instans av resurser.Mutex tillåter flera programtrådar att komma åt en enda resurs men inte samtidigt.
ÄganderättSemaphore-värdet kan ändras genom vilken process som helst som förvärvar eller släpper ut resursen.Mutex objektlås frigörs endast av processen som har förvärvat låset på den.
kategori~~POS=TRUNCSemaphore kan kategoriseras i att räkna semafor och binär semafor.Mutex kategoriseras inte längre.
DriftSemaphore-värde modifieras med hjälp av wait () och signal () -operationen.Mutex-objektet är låst eller olåst genom processen som begär eller släpper ut resursen.
Resurser upptagnaOm alla resurser används, utför processen som begär resurser att utföra ventetid () och blockera sig tills semaforräkning blir större än en.Om ett mutexobjekt redan är låst, väntar processen och begärande av resurser och köras av systemet tills lås släpps.

Definition av Semaphore

Semaphore är ett processsynkroniseringsverktyg. Semaphore är typiskt en heltal variabel S som initialiseras till antalet resurser som finns i systemet och semaforvärdet kan endast modifieras av två funktioner vänta () och signal () förutom initialisering.

Ventetiden () och signal () -operationen ändrar semaphoreens värde odelbart . Det betyder att när en process ändrar semaforets värde, kan ingen annan process samtidigt ändra semaforets värde. Semaphore utmärks av operativsystemet i två kategorier Att räkna semaforer och binär semafor .

I Counting Semaphore initialiseras semaforens S-värde till antalet resurser s som finns i systemet. När en process vill komma åt resursen utförs den vänta () -operationen på semaforen och minskar semaforens värde av en. När den släpper ut resursen, utför den signal () -operationen på semaforen och ökar värdet av semaforen med en. När semaforräkningen går till 0 betyder det att alla resurser är upptagna av processerna. Om en process behöver använda en resurs när semaphore count är 0, exekverar den vänta () och blir blockerad tills värdet av semafor blir större än 0.

I binär semafor ligger semaforens värde mellan 0 och 1 . Det liknar mutexlås, men mutex är en låsningsmekanism medan semaforen är en signalmekanism. I binär semafor, om en process vill komma åt resursen, utför den vänta () -operationen på semaforen och minskar semaforens värde från 1 till 0. När den släpper ut resursen utför den en signal () -operation på semaforen och steg dess värde till 1. Om värdet av semaforen är 0 och en process vill komma åt resursen utför den wait () -operationen och blockera sig tills den aktuella processen med resurserna frigör resursen.

Definition av Mutex

Ömsesidigt uteslutande objekt kallas kort som Mutex. Från begreppet ömsesidig uteslutning kan vi förstå att endast en process i taget kan komma åt den givna resursen. Mutex-objektet tillåter att flera programtrådar använder samma resurs men en i taget inte samtidigt.

När ett program startar begär det att systemet skapar ett mutexobjekt för en given resurs. Systemet skapar mutexobjektet med ett unikt namn eller ID. När programtråden vill använda resursen upptar den lås på mutexobjektet, utnyttjar resursen och efter användning släpper det låset på mutexobjektet. Då får nästa process förvärva låset på mutexobjektet.

Under tiden har en process förvärvat låset på mutex objekt utan att någon annan tråd / process kan komma åt den resursen. Om mutex-objektet redan är låst måste processen som önskar förvärva låset på mutex-objektet vänta och köras upp av systemet tills mutex-objektet är upplåsat.

Viktiga skillnader mellan Semaphore och Mutex

  1. Semaphore är en signalmekanism som wait () och signal () operation utförd på semaphore variabel indikerar huruvida en process förvärvar resursen eller frigör resursen. På andra händer är mutex en låsningsmekanism, för att förvärva en resurs måste en process låsa mutexobjektet och samtidigt som en resursprocess måste frigöras måste mutexobjektet låsas upp.
  2. Semaphore är typiskt en heltal variabel medan mutex är ett objekt .
  3. Semaphore gör det möjligt för flera programtrådar att få tillgång till den begränsade exemplet av resurser . Å andra sidan tillåter Mutex flera programtrådar att komma åt en enda gemensam resurs men en i taget.
  4. Semaphore-variabelvärdet kan modifieras med varje process som förvärvar eller släpper ut resurs genom att utföra vänta () och signal () -operationen. På andra händer kan lås som förvärvas på mutexobjektet släppas endast genom processen som har förvärvat låset på mutexobjektet.
  5. Semaphore är av två typer som räknar semafor och binär semafor som är ganska lik mutexen.
  6. Semaphore-variabelvärdet modifieras genom att vänta () och signal () -operationen bortsett från initialisering. Det dämpade objektet är dock låst eller olåst genom processen att förvärva eller släppa resursen.
  7. Om alla resurser förvärvas av processen och ingen resurs är ledig, gör processen som önskar att skaffa resurs utföra vänta () -operationen på semaforevariabel och blockerar sig till att antalet somafor blir större än 0. Men om ett mutexobjekt redan är låst då processen som önskar att skaffa resurser väntar och köras av systemet tills resursen släpps och mutex objekt blir olåst.

Slutsats:

Semaphore är ett bättre alternativ om det finns flera instanser av resurser tillgängliga. När det gäller enskild gemensam resurs är mutex ett bättre val.

Top