Mutex vs Event
U C # postoji puno različitih opcija sinkronizacije niti. Dvije šire korištene su mutex i događaj. Koja je točno razlika između ove dvije? Koji je bolji izbor?
Opcija događaja može dati nitima mogućnost da se blokiraju dok se događaj ne emitira, čime dobiva naziv „događaj“. To je isto što i spavati nešto i samo se probuditi kad se dogodi nešto značajno. Događaji se ne razlikuju od mutexa jer mutexi nemaju mogućnost signalizacije ili funkcije. Događaji mogu očistiti signal nakon što se probudi netko tko je mogao čekati na njega. Čak su i API-ji u mogućnosti dopustiti mogućnost blokiranja sve dok se ne signalizira jedan ili svi različiti događaji. Pored toga, događaji su jezgrani objekti. Oni nisu "lakši" u odnosu na mutex. Događaj je u osnovi kernel objekt koji ima dva stanja. Normalno da događaj signalizira dolazak događaja, a ponekad čak i kraj I / O operacije.
"Mutex" znači međusobno isključivanje. To je oblik mehanizma koordiniranja za opseg resursa koji se dijele. Zamislite to kao oblik transakcije. Vi niste dužni čekati iako želite pristupiti nekoliko dijeljenih resursa (samo u slučaju da mu drugi već pristupaju) blokirate. Muteks se sastoji od dva stanja iako postoji za provođenje međusobne isključenosti. To se događa kada želite zaštititi dio koda koji obično ažurira zajednički resurs iz dijela u kojem se traži mutex na dio u kojem će biti objavljen. To dovodi do činjenice da niti jedan drugi konac ne može proći kroz odjeljak.
Ljudi koji su pokušali simulirati događaj uz pomoć muteksa morali su se susresti s problemom u kojem, čim se zaključa ili zaključi događaj, osoba drži sve ostale gore do zaključavanja. Ovo nije semantika događaja koji se signalizira. Događaj može ostati objavljen i oblik kapije bit će dostupan za sva ispitivanja niti u slučaju da nema zaključavanja. Mutex posvećen međuprocesnoj sinkronizaciji nalazi se u objektu u načinu kernela. Događaji napravljeni za višestruku sinkronizaciju pod jednom metodom nalaze se u objektu korisničkog načina.
Mutex objekt je pretežak i previše općenit. Predmeti događaja mnogo su lakši. Sinkronizacija u korisničkom načinu rada koristi se u većini situacija zbog razloga što daje manje CPU ciklusa. Mutex je vrlo sličan kritičnom odjeljku i koristi se za sinkronizaciju pristupa zajedničkim izvorima. Događaji imaju potpuno drugačiju funkciju, jer se koriste za sinkronizaciju zadataka ili za upravljanje rasporedom zadataka za neke ljude.
Događaji su više varijabla stanja, za razliku od Mutex-a, koji je više poput a
pratiti u nekoj terminologiji, ili to može biti tradicionalni oblik semafora / muteksa.
Sažetak:
1. Opcija događaja može dati nitima mogućnost da se blokiraju dok se događaj ne emitira, čime dobiva naziv "događaj".
2.Svaki događaj u osnovi je kernel objekt koji ima dva stanja. Normalno da događaj signalizira dolazak događaja, a ponekad čak i kraj I / O operacije.
3. "Mutex" znači međusobno isključivanje. To je oblik mehanizma koordiniranja za opseg resursa koji se dijele.
4.Mutex posvećen međuprocesnoj sinkronizaciji nalazi se u objektu u načinu kernela. Događaji napravljeni za višestruku sinkronizaciju pod jednom metodom nalaze se u objektu korisničkog načina.
5.Događaji su više varijabla stanja, za razliku od Mutexa, koji je više poput a
pratiti u nekoj terminologiji, ili to može biti tradicionalni oblik semafora / muteksa.