Semafoor v.s. Mutex

Vergelijking tussen semafoor en mutex.

Mutex

Het concept van de mutex lijkt veel op dat van een slot. Wanneer u een kamer wilt betreden, moet u het slot verwerven en de toestemming hebben om binnen te komen. In de informatica wordt de mutex gebruikt om kritieke secties te beschermen, zodat andere threads geen toegang hebben tot dezelfde code.

Thread A Thread Bacquire mutex acquire mutex ... it will block 
do something critical do something critical
release mutex release lock

Is een sleutel voor een toilet. Eén persoon kan de sleutel hebben – het toilet bezetten – op het moment. Als hij klaar is, geeft (bevrijdt) hij de sleutel aan de volgende persoon in de rij.

Officieel: “Mutexen worden meestal gebruikt om de toegang tot een deel van re-entrant code die niet gelijktijdig kan worden uitgevoerd door meer dan één thread te serialiseren. Een mutex-object staat slechts één thread toe in een gecontroleerde sectie, en dwingt andere threads die toegang tot die sectie proberen te krijgen te wachten tot de eerste thread die sectie heeft verlaten.”
Ref: Symbian Developer Library

Semaphore

Niet zoals mutex worden verworven of wachten om te worden verworven. Semaphore kan de initiële waarde op N>1 zetten. We kunnen de waarde gebruiken om te beperken hoeveel gebruikers in dit proces toegang krijgen tot de kritieke sectie.

Het belangrijkste verschil tussen semafoor en mutex is dat mutex alleen kan worden vrijgegeven door de gebruiker die hem vasthoudt. Maar in het semafoor mechanisme kan iedere gebruiker een signaal geven aan een specifieke semafoor in de kernel. Dit kan de draad concurrency.

Hieronder is het concept van semafoor , Wanneer draad A is OK dan signaal draad B dan draad B start iets te doen.

Dit mechanisme zorgen voor de concurrency in proces.

Task A Task B
... Take BinSemaphore <== wait for something
Do Something Noteworthy
Give BinSemaphore do something <== unblocks

Is het aantal vrije identieke toilet sleutels. Bijvoorbeeld, stel we hebben vier toiletten met identieke sloten en sleutels. De semafoor-telling – het aantal sleutels – wordt in het begin op 4 gezet (alle vier de toiletten zijn vrij), daarna wordt de tellerwaarde afgebouwd als er mensen binnenkomen. Als alle toiletten vol zijn, d.w.z. er zijn geen vrije sleutels meer, dan is de semafoor-telling 0. Nu, als er één persoon het toilet verlaat, wordt de semafoor verhoogd tot 1 (één vrije sleutel), en aan de volgende persoon in de rij gegeven.

Officieel: “Een semafoor beperkt het aantal gelijktijdige gebruikers van een gedeelde bron tot een maximum aantal. Threads kunnen toegang tot de bron aanvragen (door de semafoor te verlagen), en kunnen aangeven dat ze klaar zijn met het gebruik van de bron (door de semafoor te verhogen).”
Ref: Symbian Developer Library

Risico’s

Het gebruik van de mutex kan Priority Inversion tegenkomen. U moet het scenario op basis van de mutex zorgvuldig ontwerpen.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.