Mutex i događaj

Anonim

Mutex vs događaj

U C # postoji mnogo različitih opcija sinkronizacije navoja. Dvije više naširoko koristi su mutex i događaj. Upravo ono što je točno razlika između ta dva? Koji je bolji izbor?

Opcija događaja je u mogućnosti dati teme mogućnost da blokira sve dok se emisija ne emitira, tako da je naziv "događaj". To je isto kao stavljanje nešto spavati i samo ga probuditi kad se nešto od značajnosti dogodi. Događaji se razlikuju od mutexa jer muteeksi nemaju signalnu opciju ili funkciju. Događaji mogu očistiti signal kada se netko tko je mogao pričekati je probudio. Čak i API-ji mogu dopustiti opciju blokiranja sve dok se ne signaliziraju svi ili različiti događaji. Osim toga, događaji su kernel objekti. Oni nisu "lakši" u usporedbi s muteeksima. Događaj je u osnovi objekt kernela koji ima dvije države. Uobičajeno, događaj signalizira dolazak događaja, a ponekad i kraj operacije I / O.

"Mutex" označava Mutual Exclusion. To je oblik opsežnog mehanizma koordinacije za resurse koji se dijele. Zamislite to kao oblik transakcije. Niste dužni čekati, iako želite pristupiti nekoliko dijeljenih resursa (samo u slučaju da su drugi već pristupili) blokirate. Mutex se sastoji od dvije države, iako postoji kako bi se postiglo međusobno isključivanje. To je za kada želite zaštititi dio koda koji obično ažurira dijeljeni resurs s dijela u kojem se mutex tvrdio da je dio u kojem će biti objavljen. To dovodi do činjenice da niti jedna druga nit ne može proći kroz odjeljak.

Ljudi koji su pokušali simulirati događaj uz pomoć mutexa morali su se susresti s problemom, čim se zaključavanje stekne ili je događaj signaliziran, osoba zadržava sve ostale sve dok se ne otpušta. Ovo nije semantika događaja koji se signalizira. Događaj može ostati objavljen, a oblik svih vrata će biti dostupan za sve testiranje niti u slučaju da nema nikakvih bravica. Mutex posvećen interprocess sinkronizaciji je u kernel-modu objektu. Događaji za višestruku sinkronizaciju pod jednom metodom nalaze se u korisničkom modusu.

Mutex objekt previše je težak i preopćenit. Predmeti događaja su mnogo lakši. Sinkronizacija korisničkog načina upotrebljava se u većini slučajeva zbog razloga što daje manje ciklusa procesora. Mutex je vrlo sličan kritičnom odjeljku i koristi se za usklađivanje pristupa resursima koji se dijele. Događaji imaju potpuno drugačiju funkciju jer se koriste za sinkronizaciju zadataka ili za upravljanje raspoređivanjem zadataka za neke ljude.

Događaji su više varijabla uvjeta, za razliku od Mutexa, što je više kao pratiti u nekoj od terminologije, ili to može biti tradicionalni oblik semafora / mutexa.

Sažetak:

1. Opcija događaja je u mogućnosti dati teme mogućnost da blokira sve dok se ne emitira događaj, pa tako ime "događaj".

2. Događaj je u biti objekt kernela koji ima dvije države. Uobičajeno, događaj signalizira dolazak događaja, a ponekad i kraj operacije I / O.

3. "Mutex" označava Mutual Exclusion. To je oblik opsežnog mehanizma koordinacije za resurse koji se dijele.

4.Mutex posvećen interprocess sinkronizaciji je u kernel-modu objektu. Događaji za višestruku sinkronizaciju pod jednom metodom nalaze se u korisničkom modusu.

5.Eventi su više uvjetne varijable, za razliku od Mutexa, koji je više poput pratiti u nekoj od terminologije, ili to može biti tradicionalni oblik semafora / mutexa.