„Mutex vs Event“
C # yra daugybė skirtingų sriegių sinchronizacijos parinkčių. Dvi plačiau naudojamos yra muteksas ir renginys. Tik koks skirtumas tarp šių dviejų? Kuris yra geresnis pasirinkimas?
Įvykio parinktis gali suteikti gijoms galimybę blokuoti, kol įvykis nebus transliuojamas, vadinasi „įvykis“. Tai yra tas pats, kas miegoti ir miegoti tik tada, kai atsitinka kažkas svarbaus. Įvykiai nepanašūs į „mutex“, nes „mutex“ neturi signalizacijos parinkties ar funkcijos. Įvykiai sugeba išvalyti signalą, kai pažadinamas kas nors, kas galėjo jo laukti. Net API gali leisti parinktį blokuoti, kol nebus signalizuotas vienas ar visi skirtingi įvykiai. Be to, įvykiai yra branduolio objektai. Jie nėra „lengvesni“, palyginti su muteksais. Įvykis iš esmės yra branduolio objektas, turintis dvi būsenas. Paprastai įvykis signalizuoja apie įvykio atsiradimą ir kartais net I / O operacijos pabaigą.
„Mutex“ reiškia abipusę atskirtį. Tai yra bendro pobūdžio išteklių, kuriais dalijamasi, koordinavimo mechanizmas. Pagalvokite apie tai kaip apie sandorio formą. Jūs neprivalote laukti, nors norite pasiekti kelis bendrai naudojamus išteklius (tik tuo atveju, kai kiti jau prieina prie jų), kuriuos blokuojate. Mutexą sudaro dvi būsenos, nors jis egzistuoja, kad būtų įgyvendinta abipusė atskirtis. Tai yra skirta tada, kai norite apsaugoti tam tikrą kodo dalį, kuri paprastai atnaujina bendrinamus išteklius iš tos dalies, kurioje teigiama, kad „mutex“ yra, į tą dalį, kurioje jis bus išleistas. Tai lemia, kad joks kitas siūlas negali praeiti per skyrių.
Žmonės, kurie bandė imituoti įvykį naudodami „mutex“, turėjo susidurti su problema, kai tik įsigijęs užraktą ar pranešęs apie įvykį, žmogus laiko visus kitus tol, kol užraktas nebus atleistas. Tai nėra signalizuojamo įvykio semantika. Renginys gali likti paskelbtas ir bus galima naudoti vartų formą, kad būtų galima atlikti visų siūlų patikrinimą, jei nėra jokių užraktų. „Mutex“, įsipareigojusi atlikti sinchronizavimą tarp procesų, yra branduolio režimo objekte. Įvairių sijų sinchronizavimui įvykiai, sukurti pagal vieną metodą, yra vartotojo režimo objekte.
„Mutex“ objektas yra per sunkus ir per daug bendro pobūdžio. Renginių objektai yra daug lengvesni. Vartotojo režimo sinchronizavimas yra naudojamas daugelyje situacijų dėl to, kad jis suteikia mažiau procesoriaus ciklų. „Mutex“ labai primena kritinį skyrių ir yra naudojamas sinchronizuoti prieigą prie bendrai naudojamų išteklių. Įvykiai turi visiškai kitokią funkciją, nes jie naudojami užduotims sinchronizuoti arba kai kuriems žmonėms tvarkyti užduočių planavimą.
Įvykiai yra labiau būklės kintamieji, skirtingai nei „Mutex“, labiau panašūs į a
stebėti kai kuriose terminologijose, arba tai gali būti tradicinė semaforo / mutekso forma.
Santrauka:
1.Įvykio parinktis gali suteikti gijoms galimybę blokuoti iki įvykis bus transliuojamas, taigi pavadinimas „įvykis“.
2.Įvykis iš esmės yra branduolio objektas, turintis dvi būsenas. Paprastai įvykis signalizuoja apie įvykio atsiradimą ir kartais net I / O operacijos pabaigą.
3. „Mutex“ reiškia abipusę atskirtį. Tai yra bendro pobūdžio išteklių, kuriais dalijamasi, koordinavimo mechanizmas.
4. „Mutex“, įsipareigojusi atlikti sinchronizavimą tarp procesų, yra branduolio režimo objekte. Įvairių sijų sinchronizavimui įvykiai, sukurti pagal vieną metodą, yra vartotojo režimo objekte.
5.Renginiai yra labiau būklės kintamasis, skirtingai nei „Mutex“, kuris labiau panašus į a
stebėti kai kuriose terminologijose, arba tai gali būti tradicinė semaforo / mutekso forma.