Skillnad mellan Mutex och Event Skillnad mellan

Anonim

Mutex vs Event

I C #, finns det många olika synkroniseringsalternativ för trådlösning. De två mer använda är mutex och händelse. Vad är skillnaden mellan dessa två? Vilken är ett bättre alternativ?

Eventalternativet kan ge tråden möjlighet att blockera tills en händelse sänds såmed namnet "händelse". "Det är detsamma som att sätta något att sova och bara vakna upp när något av betydelse händer. Händelser är till skillnad från mutexes eftersom mutexes inte har signaleringsalternativet eller funktionen. Händelser kan rensa signalen när någon som kunde vänta på det har vaknat. Även API: er kan låta alternativet blockera tills en eller flera av de olika händelserna signaleras. Dessutom är händelser kärnobjekt. De är inte "ljusare" jämfört med mutexer. En händelse är i grunden ett kärnobjekt med två tillstånd. Normalt signalerar en händelse en händelsens ankomst och ibland även slutet på en I / O-operation.

"Mutex" står för ömsesidig uteslutning. Det är en form av scoped koordinationsmekanism för resurser som delas. Tänk på det som en form av transaktion. Du är inte skyldig att vänta, även om du vill komma åt några delade resurser (endast om andra redan har tillgång till det) du blockerar. En mutex består av två stater, även om det existerar att genomföra en gemensam uteslutning. Det här gäller när du vill skydda en kodsträcka som vanligtvis uppdaterar en delad resurs från den del där mutexen hävdas till den del där den kommer att släppas. Detta leder till att ingen annan tråd kan passera genom sektionen.

Människor som har försökt att simulera en händelse med hjälp av en mutex måste möta problemet, så snart låset förvärvas eller händelsen signaliseras håller personen upp alla andra tills låset släpps. Detta är inte semantiken för en händelse som signaleras. En händelse kan förbli upplagd och en form av grind kommer att finnas tillgänglig för alla trådtestning i händelse av att det inte finns några lås. Mutex engagerad i interprocesssynkronisering är i kernel-modeobjekt. Händelser gjorda för multithreaded synkronisering under en metod är i användarmod objekt.

Mutex objektet är för tungt och för allmänt. Händelseobjekt är mycket ljusare. Synkronisering med användarläge används i de flesta situationer på grund av att det ger mindre CPU-cykler. Mutex är väldigt mycket som en kritisk sektion och används för att synkronisera åtkomst till resurser som delas. Händelser har en helt annan funktion eftersom de används för att synkronisera uppgifter eller för hantering av arbetsplanering för vissa personer.

Händelser är mer av en tillståndsvariabel, till skillnad från Mutex, vilket är mer som en

bildskärm i en del av terminologin, eller det kan vara en traditionell form av semafor / mutex.

Sammanfattning:

1. Eventalternativet kan ge tråden möjlighet att blockera tills en händelse sänds, alltså namnet "händelse". ”

2. En händelse är i grunden ett kärnobjekt med två tillstånd. Normalt signalerar en händelse en händelsens ankomst och ibland även slutet på en I / O-operation.

3. "Mutex" står för ömsesidig uteslutning. Det är en form av scoped koordinationsmekanism för resurser som delas.

4. Mutex engagerad i interprocesssynkronisering är i kernel-modeobjekt. Händelser gjorda för multithreaded synkronisering under en metod är i användarmod objekt.

5. Händelser är mer av en tillståndsvariabel, till skillnad från Mutex, som är mer som en

bildskärm i någon av terminologin, eller det kan vara en traditionell form av semafor / mutex.