Verschil tussen Mutex en Event

Mutex vs evenement

In C # zijn er veel verschillende threading-synchronisatieopties. De twee meest gebruikte zijn mutex en event. Wat is precies het verschil tussen deze twee? Welke is een betere optie?

De gebeurtenisoptie kan threads de optie geven om te blokkeren totdat een evenement wordt uitgezonden en dus de naam 'gebeurtenis'. Het is hetzelfde als iets in de slaapstand zetten en het alleen maar wakker maken wanneer er iets van betekenis gebeurt. Gebeurtenissen zijn in tegenstelling tot mutexen omdat mutexen geen signaleringsoptie of -functie hebben. Gebeurtenissen kunnen het signaal wissen zodra iemand die erop kon wachten, is gewekt. Zelfs API's kunnen de optie toestaan ​​om te blokkeren totdat een of alle verschillende gebeurtenissen worden gesignaleerd. Daarnaast zijn gebeurtenissen kernel-objecten. Ze zijn niet "lichter" in vergelijking met mutexes. Een gebeurtenis is in feite een kernel-object met twee toestanden. Normaal gesproken signaleert een gebeurtenis de komst van een gebeurtenis en soms zelfs het einde van een I / O-bewerking.

"Mutex" staat voor Mutual Exclusion. Het is een vorm van scoped coördinatiemechanisme voor middelen die worden gedeeld. Zie het als een vorm van transactie. U bent niet verplicht om te wachten, hoewel u toegang wilt hebben tot een paar gedeelde bronnen (alleen in het geval dat anderen al toegang hebben) die u blokkeert. Een mutex bestaat uit twee staten, hoewel het bestaat om een ​​wederzijdse uitsluiting tot stand te brengen. Dit is voor als u een stuk code wilt beschermen dat gewoonlijk een gedeelde bron van het deel waarin de mutex wordt geclaimd, bijwerkt naar het gedeelte waarin het zal worden vrijgegeven. Dit leidt ertoe dat er geen andere thread door de sectie kan gaan.

Mensen die hebben geprobeerd een gebeurtenis te simuleren met behulp van een mutex, moesten het probleem tegenkomen waarin, zodra het slot is verkregen of de gebeurtenis is gesignaleerd, de persoon alle anderen buiten houdt totdat het slot wordt vrijgegeven. Dit is niet de semantiek van een gesignaleerde gebeurtenis. Een evenement kan gepost blijven en een vorm van poort zal beschikbaar zijn voor alle draadtesten in het geval er geen sloten zijn. Mutex dat is toegewezen aan interprocessynchronisatie bevindt zich in een kernelmodusobject. Gebeurtenissen die zijn gemaakt voor multithread-synchronisatie onder één methode, bevinden zich in het gebruikersmodusobject.

Mutex-object is te zwaar en te algemeen. Gebeurtenisobjecten zijn veel lichter. Gebruikersmodus synchronisatie wordt in de meeste situaties gebruikt vanwege de reden dat het minder CPU-cycli geeft. Mutex lijkt veel op een kritieke sectie en wordt gebruikt om de toegang tot gedeelde bronnen te synchroniseren. Gebeurtenissen hebben een totaal andere functie omdat ze worden gebruikt voor het synchroniseren van taken of voor het beheren van taakplanning voor sommige mensen.

Gebeurtenissen zijn meer een conditievariabele, in tegenstelling tot Mutex, wat meer lijkt op een
controleren in een deel van de terminologie, of het kan een traditionele vorm van semafoor / mutex zijn.

Samenvatting:

1.De gebeurtenisoptie kan threads de optie geven om te blokkeren totdat een evenement wordt uitgezonden, dus de naam "evenement".

2. Een gebeurtenis is in feite een kernel-object met twee toestanden. Normaal gesproken signaleert een gebeurtenis de komst van een gebeurtenis en soms zelfs het einde van een I / O-bewerking.

3. "Mutex" staat voor Mutual Exclusion. Het is een vorm van scoped coördinatiemechanisme voor middelen die worden gedeeld.

4.Mutex die is toegewezen aan interprocessynchronisatie bevindt zich in een kernelmodusobject. Gebeurtenissen die zijn gemaakt voor multithread-synchronisatie onder één methode, bevinden zich in het gebruikersmodusobject.

5. Er zijn meer toestandsvariabelen, in tegenstelling tot de Mutex, die meer lijkt op a
controleren in een deel van de terminologie, of het kan een traditionele vorm van semafoor / mutex zijn.