Skillnaden mellan Semaphore och Mutex
Semaphore vs Mutex
Semaphore är en datastruktur som används för att säkerställa att flera processer inte kommer åt en gemensam resurs eller en kritisk sektion samtidigt, i parallella programmeringsmiljöer. Semaforer används för att undvika döda lås och löpförhållanden. Mutex (Mutual Exclusion Object) används också för att undvika tillgång till en gemensam resurs samtidigt genom flera samtidiga processer.
Vad är en Semaphore ?
Semaphore är en datastruktur som används för att ge gemensam uteslutning till kritiska avsnitt. Semaforer stöder främst två operationer som kallas vänta (historiskt känd som P) och signal (historiskt känd som V). Vänta operationen blockerar en process tills semaforen är öppen och signaloperationen tillåter en annan process (tråd) att komma in. Varje semafor är förknippad med en kö av väntprocesser. När vänteläge kallas av en tråd, om semaphore är öppen kan tråden fortsätta. Om semaforen stängs när väntetiden kallas av en tråd, är tråden blockerad och den måste vänta i kön. Signaloperationen öppnar en semafor och om det finns en tråd som väntar i kön, får processen fortsätta och om det inte finns några trådar som väntar i kön, kommer signalen ihåg för nästa tråd. Det finns två typer av semaforer som heter mutex semaforer och räknar semaforer. Mutex semaforer tillåter en enda åtkomst till en resurs och räknar semaforer tillåter flera trådar att komma åt en resurs (som har flera enheter tillgängliga).
Vad är en Mutex?
När en datoransökan startas skapar den en mutex och bifogas den till en resurs. När resursen används av en tråd är den låst och andra trådar kan inte använda den. Om en annan tråd vill använda samma resurs måste den göra en förfrågan. Då kommer den tråden att placeras i en kö tills den första tråden är färdig med resursen. När den första tråden är färdig med resursen kommer lås att tas bort och tråden som väntar i köen kan få tillgång till resursen. Om det finns flera trådar som väntar i kön, får de åtkomst på roterande basis. Praktiskt taget när mutex byter tillträde till en resurs mellan flera trådar kommer det att vara synligt eftersom flera trådar konsumerar en resurs samtidigt. Men internt är endast en enda tråd tillgänglig för resursen vid en given tidpunkt.
Vad är skillnaden mellan Semaphore och Mutex?
Även om både semaforerna och mutexobjekten används för att uppnå ömsesidig uteslutning i parallella programmeringsmiljöer, har de vissa skillnader. Ett mutexobjekt tillåter endast en enda tråd att konsumera en resurs eller en kritisk sektion, medan semforer tillåter ett begränsat antal samtidiga åtkomst till en resurs (under ett maximalt tillåtet tal).Med mutexobjekt måste andra trådar som vill komma åt resursen vänta i en kö tills den aktuella tråden är färdig med hjälp av resursen.