Mutex vs begivenhed
I C # er der en masse forskellige indstillinger for gevindssynkronisering. De to mere udbredte er mutex og begivenhed. Hvad er præcis forskellen mellem disse to? Hvilken er en bedre mulighed?
Begivenhedsindstillingen er i stand til at give tråde muligheden for at blokere, indtil en begivenhed udsendes, hvilket betyder navnet "begivenhed." Det er det samme som at sætte noget i søvn og kun vække det, når der sker noget af betydning. Begivenheder er i modsætning til mutexes, fordi mutexes ikke har signalindstillingen eller funktionen. Begivenheder er i stand til at rydde signalet, når en person, der var i stand til at vente på det, er blevet vækket. Selv API'er er i stand til at tillade mulighed for at blokere, indtil en eller alle de forskellige begivenheder er signaleret. Derudover er begivenheder kerneobjekter. De er ikke "lettere" sammenlignet med mutexer. En begivenhed er dybest set et kerneobjekt med to tilstande. Normalt signaliserer en begivenhed begivenheden og undertiden endda afslutningen på en I / O-operation.
“Mutex” står for gensidig udstødelse. Det er en form for scoped-koordineringsmekanisme for ressourcer, der deles. Tænk på det som en form for transaktion. Du er ikke forpligtet til at vente, selvom du vil have adgang til et par delte ressourcer (kun i det tilfælde, at andre allerede har adgang til det), du blokerer. En mutex består af to stater, skønt den eksisterer for at gennemføre en gensidig udelukkelse. Dette er til, når du vil beskytte en strækning af kode, der normalt opdaterer en delt ressource fra den del, hvor mutex'en hævdes til den del, hvori den frigives. Dette fører til det faktum, at ingen anden tråd kan passere gennem sektionen.
Mennesker, der har forsøgt at simulere en begivenhed ved hjælp af en mutex, måtte støde på problemet, hvor 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 bliver signaleret. En begivenhed kan forblive bogført, og en form for gate vil være tilgængelig for alle trådtest i tilfælde af, at der ikke er nogen låse. Mutex forpligtet til interprocess-synkronisering er i kernel-mode-objekt. Begivenheder, der er foretaget til multitrådesynkronisering under en metode, er i bruger-mode-objekt.
Mutex-objekt er for tungt og for generelt. Begivenhedsobjekter er meget lettere. Brugertilstandssynkronisering bruges i de fleste situationer på grund af, at den giver mindre CPU-cyklusser. Mutex ligner meget et kritisk afsnit og bruges til at synkronisere adgang til ressourcer, der deles. Begivenheder har en helt anden funktion, fordi de bruges til at synkronisere opgaver eller til styring af opgaveplanlægning for nogle mennesker.
Begivenheder er mere en tilstandsvariabel, i modsætning til Mutex, der mere ligner en
monitor i nogle af terminologierne, eller det kan være en traditionel form for semafor / mutex.
Resumé:
1.Hændelsesindstillingen er i stand til at give tråde muligheden for at blokere, indtil en begivenhed udsendes, således navnet "begivenhed."
2. En begivenhed er dybest set et kerneobjekt med to tilstande. Normalt signaliserer en begivenhed begivenheden og undertiden endda afslutningen på en I / O-operation.
3. “Mutex” står for gensidig ekskludering. Det er en form for scoped-koordineringsmekanisme for ressourcer, der deles.
4.Mutex forpligtet til interprocess-synkronisering er i kernel-mode-objekt. Begivenheder, der er foretaget til multitrådesynkronisering under en metode, er i bruger-mode-objekt.
5. Udstyr er mere en tilstandsvariabel, i modsætning til Mutex, der ligner mere en
monitor i nogle af terminologierne, eller det kan være en traditionel form for semafor / mutex.