Mutex ja tapahtuma

Anonim

Mutex vs. tapahtuma

C #: ssa on paljon erilaisia ​​langoituksen synkronointivaihtoehtoja. Kaksi laajempaa käytetään ovat mutex ja tapahtuma. Mikä on täsmälleen näiden kahden välinen ero? Kumpi on parempi vaihtoehto?

Tapahtuma-optio pystyy antamaan säikeille mahdollisuuden estää, kunnes tapahtuma lähetetään, jolloin nimi "tapahtuma". Se on sama kuin laittaa jotain nukkumaan ja vain herättää sitä kun jotain merkitystä tapahtuu. Tapahtumat ovat toisin kuin mutexit, koska mutexilla ei ole signalointivaihtoehtoa tai -toimintoa. Tapahtumat pystyvät selvittämään signaalin, kun joku, joka pystyi odottamaan sitä, on herätty. Jopa API: t voivat sallia, että vaihtoehto estää yhden tai kaikki eri tapahtumien ilmoittamisen. Lisäksi tapahtumat ovat ytimen esineitä. Ne eivät ole "kevyempi" kuin mutexit. Tapahtuma on periaatteessa ytimen kohde, jossa on kaksi tilaa. Tapahtuma yleensä merkitsee tapahtuman tuloa ja joskus myös I / O-operaation loppua.

"Mutex" tarkoittaa keskinäistä syrjäytymistä. Se on resurssien resurssien koordinointimekanismin muoto, joka on jaettu. Ajattele sitä tapahtumana. Sinun ei tarvitse odottaa, vaikka haluat käyttää muutamia jaettuja resursseja (vain siinä tapauksessa, että muut jo käyttävät sitä), jotka estät. Mutex koostuu kahdesta tilasta, vaikka se on olemassa keskinäisen poissulkemisen toteuttamiseksi. Tämä koskee kun haluat suojata koodinpituuden, joka yleensä päivittää jaetun resurssin siitä osasta, jossa mutexia vaaditaan osuuteen, jossa se vapautetaan. Tämä johtaa siihen tosiasiaan, että mikään muu säie ei voi kulkea osan läpi.

Ihmiset, jotka ovat yrittäneet simuloida tapahtumaa mutexin avulla, joutuivat kohtaamaan ongelman, jossa heti kun lukko hankittiin tai tapahtuma oli ilmoitettu, henkilö pitää kaikki muut ulos kunnes lukko vapautetaan. Tämä ei ole tapahtuman tapahtuman semantiikka. Tapahtuma voi jäädä näkyviin ja porttimuoto on käytettävissä kaikilla langankokeilla, ellei lukkoja ole. Mutex, joka on sitoutunut käsittelemään synkronointia, on ytimen tilassa. Yhden menetelmän mukaiset monisäikeisen synkronoinnin tapahtumat ovat käyttäjän tilassa.

Mutex-objekti on liian raskas ja liian yleinen. Tapahtumaobjektit ovat paljon kevyempiä. Käyttäjätilan synkronointia käytetään useimmissa tilanteissa siksi, että se antaa vähemmän CPU-syklejä. Mutex on hyvin kuin kriittinen osa ja sitä käytetään synkronoimaan pääsyn resursseihin, jotka on jaettu. Tapahtumilla on täysin erilainen tehtävä, koska niitä käytetään synkronoimaan tehtäviä tai hoitamaan tehtävien aikataulutusta joillekin ihmisille.

Tapahtumat ovat enemmän ehto-muuttuja, toisin kuin Mutex, joka on enemmän kuin a valvoa joissakin terminologeissa, tai se voi olla perinteinen semafor / mutex-muoto.

Yhteenveto:

1.Tapahtuma-optio voi antaa langoille mahdollisuuden estää, kunnes tapahtuma lähetetään, jolloin nimi "tapahtuma".

2.Tapahtuma on periaatteessa ytimen kohde, jossa on kaksi tilaa. Tapahtuma yleensä merkitsee tapahtuman tuloa ja joskus myös I / O-operaation loppua.

3. "Mutex" tarkoittaa keskinäistä syrjäytymistä. Se on resurssien resurssien koordinointimekanismin muoto, joka on jaettu.

4.Mutex, joka on sitoutunut käsittelemään synkronointia, on ytimen tilassa oleva objekti. Yhden menetelmän mukaiset monisäikeisen synkronoinnin tapahtumat ovat käyttäjän tilassa.

5.Eventit ovat enemmän ehto-muuttuja, toisin kuin Mutex, joka on enemmän kuin a valvoa joissakin terminologeissa, tai se voi olla perinteinen semafor / mutex-muoto.