Forskel mellem Mutex og Event Forskel mellem

Anonim

Mutex vs Event

I C #, er der mange forskellige synkroniseringsoptioner. De to mere udbredte er mutex og arrangement. Hvad præcist er forskellen mellem disse to? Hvilken er en bedre mulighed?

Hændelsesindstillingen er i stand til at give tråde mulighed for at blokere indtil en begivenhed er udsendt således navnet "begivenhed. "Det er det samme som at sætte noget i søvn og kun vække det op, når noget af betydning sker. Begivenheder er i modsætning til mutexes, fordi mutexes ikke har signaleringsfunktionen eller funktionen. Begivenheder kan rydde signalet, når en person, der var i stand til at vente på det, er blevet vågnet. Selv API'er kan tillade muligheden for at blokere indtil en eller alle de forskellige hændelser er signaleret. Derudover er begivenheder kerneobjekter. De er ikke "lettere" sammenlignet med mutexes. En begivenhed er dybest set et kernelobjekt med to tilstande. Normalt signalerer en begivenhed, at der kommer en begivenhed og undertiden endda en I / O-operation.

"Mutex" står for gensidig udelukkelse. Det er en form for scoped koordinationsmekanisme for ressourcer, der deles. Tænk på det som en form for transaktion. Du er ikke forpligtet til at vente, selvom du vil få adgang til nogle få delte ressourcer (kun i tilfælde af at andre allerede har adgang til det), blokerer du. En mutex består af to stater, selv om det eksisterer for at gennemføre en gensidig udelukkelse. Dette gælder, når du vil beskytte en strækning af kode, som normalt opdaterer en delt ressource fra den del, hvor mutex påberåbes den del, hvor den vil blive frigivet. Dette fører til, at ingen anden tråd kan passere gennem sektionen.

Personer, der har forsøgt at simulere en begivenhed ved hjælp af en mutex, måtte støde på problemet, så snart låsen er erhvervet eller begivenheden blev signaleret, holder personen alle andre ude indtil låsen er frigivet. Dette er ikke semantikken for en begivenhed, der signaleres. En begivenhed kan forblive offentliggjort, og der vil være en form for port til rådighed for alle trådtest i tilfælde af, at der ikke er låse. Mutex forpligtet til interprocess synkronisering er i kernel-mode objekt. Begivenheder lavet til multithreaded synkronisering under en metode er i brugermodusobjekt.

Mutex objekt er for tung og for generel. Eventobjekter er meget lettere. Bruger-synkronisering bruges i de fleste situationer på grund af årsagen til, at det giver mindre CPU-cyklusser. Mutex er meget som en kritisk sektion og bruges til at synkronisere adgangen til ressourcer, der deles. Begivenheder har en helt anden funktion, fordi de er vant til at synkronisere opgaver eller til forvaltning af opgaveplanlægning for nogle mennesker.

Begivenheder er mere en betingelsesvariabel, i modsætning til Mutex, som er mere som en

skærm i nogle af terminologien, eller det kan være en traditionel form for semafor / mutex.

Sammendrag:

1. Hændelsesindstillingen er i stand til at give tråde mulighed for at blokere indtil en begivenhed er udsendt, således navnet "event. ”

2. En begivenhed er dybest set et kernelobjekt med to tilstande. Normalt signalerer en begivenhed, at der kommer en begivenhed og undertiden endda en I / O-operation.

3. "Mutex" står for gensidig udelukkelse. Det er en form for scoped koordinationsmekanisme for ressourcer, der deles.

4. Mutex forpligtet til interprocess synkronisering er i kernel-mode objekt. Begivenheder lavet til multithreaded synkronisering under en metode er i brugermodusobjekt.

5. Begivenheder er mere en betingelsesvariabel, i modsætning til Mutex, som er mere som en

skærm i nogle af terminologien, eller det kan være en traditionel form for semafor / mutex.