Mutex proti dogodku
V C # obstaja veliko različnih možnosti sinhronizacije navojev. Dve bolj razširjeni sta mutex in dogodek. Le kakšna je točno razlika med tema dvema? Katera je boljša možnost?
Možnost dogodka lahko daje nitam možnost, da se blokira, dokler se dogodek ne predvaja, torej ime "dogodek". To je isto kot spati nekaj in ga zbuditi šele, ko se zgodi nekaj pomembnega. Dogodki so za razliko od mutexov, ker mutexi nimajo možnosti ali funkcije signalizacije. Dogodki lahko očistijo signal, ko se nekdo, ki je nanj čakal, prebudi. Tudi API-ji lahko dovolijo, da se možnost blokira, dokler se ne signalizira eden ali vsi različni dogodki. Poleg tega so dogodki predmeti jedra. V primerjavi z muteksi niso lažji. Dogodek je v bistvu predmet jedra, ki ima dve stanji. Običajno dogodek signalizira prihod dogodka in včasih celo konec I / O operacije.
"Mutex" pomeni vzajemna izključitev. To je oblika mehanizma koordinacije obsega, ki se deli za vire. Zamislite si to kot obliko transakcije. Vi niste dolžni čakati, čeprav želite dostopati do nekaj skupnih virov (le v primeru, da do njega že dostopajo drugi), ki jih blokirate. Muteks je sestavljen iz dveh stanj, čeprav obstaja za izvajanje medsebojne izključitve. To je namenjeno takrat, ko želite zaščititi odsek kode, ki običajno posodobi deljeni vir iz dela, v katerem se mutex uveljavlja, do dela, v katerem bo izdan. To vodi k dejstvu, da skozi odsek ne more preiti noben drug navoj.
Ljudje, ki so poskušali simulirati dogodek s pomočjo mutexa, so se morali spoprijeti s težavo, v kateri takoj, ko je ključavnica pridobljena ali je dogodek signaliziran, oseba vse ostale vodi navzgor, dokler se ključavnica ne sprosti. To ni semantika dogodka, ki se signalizira. Dogodek lahko ostane objavljen in za vsa testiranja navojev bo na voljo obrazec za prehod, če ni nobene ključavnice. Mutex, zavezan medprocesni sinhronizaciji, je v objektu v načinu jedra. Dogodki, narejeni za več-nitno sinhronizacijo po eni metodi, so v predmetu uporabniškega načina.
Predmet Mutex je pretežek in preveč splošen. Predmeti dogodkov so veliko lažji. Sinhronizacija v uporabniškem načinu se uporablja v večini situacij zaradi razloga, ker daje manj ciklov CPU-ja. Mutex je zelo podoben kritičnemu delu in se uporablja za sinhronizacijo dostopa do skupnih virov. Dogodki imajo popolnoma drugačno funkcijo, saj se uporabljajo za sinhronizacijo nalog ali za upravljanje načrtovanja nalog za nekatere ljudi.
Dogodki so bolj spremenljivka pogoja, za razliko od Mutexa, ki je bolj podoben kot
spremljajte v neki terminologiji, ali pa je to lahko tradicionalna oblika semaforja / muteksa.
Povzetek:
1. Možnost dogodka lahko daje nitam možnost, da blokirajo, dokler se dogodek ne predvaja, s tem pa tudi ime "dogodek".
2. Vsak dogodek je v bistvu predmet jedra, ki ima dve stanji. Običajno dogodek signalizira prihod dogodka in včasih celo konec I / O operacije.
3. "Mutex" pomeni medsebojna izključitev. To je oblika mehanizma usklajevanja obsega, ki se deli za vire.
4.Mutex, zavezan medprocesni sinhronizaciji, je v objektu v načinu jedra. Dogodki, narejeni za več-nitno sinhronizacijo po eni metodi, so v predmetu uporabniškega načina.
5.Eventji so bolj spremenljivka stanja, za razliko od Mutex-a, ki je bolj podoben a
spremljajte v neki terminologiji, ali pa je to lahko tradicionalna oblika semaforja / muteksa.