Forskjell mellom Mutex og Event Forskjellen mellom

Anonim

Mutex vs Event

I C #, er det mange forskjellige trekksynkroniseringsalternativer. De to mer brukte er mutex og arrangement. Bare hva er forskjellen mellom disse to? Hvilken er et bedre alternativ?

Hendelsesalternativet er i stand til å gi tråder muligheten til å blokkere opp til et arrangement sendes, så navnet "event". "Det er det samme som å sette noe i dvale og bare våkne opp når noe av betydning skjer. Hendelser er ulikt mutexes fordi mutexes ikke har signalalternativet eller funksjonen. Hendelser er i stand til å fjerne signalet når noen som var i stand til å vente på det, har blitt våknet opp. Selv API-er kan tillate muligheten til å blokkere opp til en eller alle de forskjellige hendelsene signaliseres. I tillegg er hendelser kjerneobjekter. De er ikke "lettere" sammenlignet med mutexes. En hendelse er i utgangspunktet et kjerneobjekt med to stater. Normalt signalerer en hendelse det som kommer av en hendelse og noen ganger til og med slutten av en I / O-operasjon.

"Mutex" står for gjensidig utestenging. Det er en form for scoped koordinasjonsmekanisme for ressurser som deles. Tenk på det som en form for transaksjon. Du er ikke forpliktet til å vente selv om du vil få tilgang til noen delte ressurser (bare i tilfelle at andre allerede har tilgang til det) du blokkerer. En mutex består av to stater, selv om det eksisterer for å iverksette en gjensidig utestenging. Dette er for når du vil beskytte en strekning av kode som vanligvis oppdaterer en delt ressurs fra den delen der mutexen hevdes til den delen der den vil bli utgitt. Dette fører til at ingen annen tråd kan passere gjennom seksjonen.

Folk som har forsøkt å simulere en hendelse ved hjelp av en mutex måtte møte problemet, så snart låsen er anskaffet eller hendelsen ble signalisert, holder personen alle andre opp til låsene slippes ut. Dette er ikke semantikken til et arrangement som signaliseres. En hendelse kan forbli oppført og en form for port vil være tilgjengelig for alle trådtestene i tilfelle at det ikke er noen låser. Mutex forpliktet til interprosessynkronisering er i kjernemodusobjekt. Hendelser laget for multithreaded synkronisering under en metode er i brukermodusobjekt.

Mutex objektet er for tungt og for generelt. Eventobjekter er mye lettere. Synkronisering av brukermodus brukes i de fleste situasjoner på grunn av at det gir mindre CPU-sykluser. Mutex er veldig mye som en kritisk del og brukes til å synkronisere tilgangen til ressurser som deles. Hendelser har en helt annen funksjon fordi de er vant til synkronisering av oppgaver eller for styring av oppgaveplanlegging for noen mennesker.

Hendelser er mer av en betingelsesvariabel, i motsetning til Mutex, som er mer som en

skjerm i noen av terminologien, eller det kan være en tradisjonell form for semafor / mutex.

Sammendrag:

1. Hendelsesalternativet er i stand til å gi tråder muligheten til å blokkere opp til en hendelse er kringkastet, og dermed navnet "hendelse". “

2. En hendelse er i utgangspunktet et kjerneobjekt med to stater. Normalt signalerer en hendelse det som kommer av en hendelse og noen ganger til og med slutten av en I / O-operasjon.

3. "Mutex" står for gjensidig utestenging. Det er en form for scoped koordinasjonsmekanisme for ressurser som deles.

4. Mutex forpliktet til interprosessynkronisering er i kjernemodusobjekt. Hendelser laget for multithreaded synkronisering under en metode er i brukermodusobjekt.

5. Hendelser er mer av en tilstandsvariabel, i motsetning til Mutex, som er mer som en

skjerm i noen av terminologien, eller det kan være en tradisjonell form for semafor / mutex.