Mutex i wydarzenie

Anonim

Mutex vs Event

W języku C # istnieje wiele różnych opcji synchronizacji wątków. Dwoma szerzej stosowanymi są muteks i zdarzenie. Czym dokładnie jest różnica między tymi dwoma? Która z nich jest lepszą opcją?

Opcja zdarzenia jest w stanie nadać wątkom opcję blokowania, dopóki nie zostanie nadane zdarzenie, a więc nazwa "zdarzenie". Jest to to samo, co zasypianie i budzenie go tylko wtedy, gdy dzieje się coś istotnego. Zdarzenia są niepodobne do muteksów, ponieważ muteksy nie mają opcji lub funkcji sygnalizacji. Zdarzenia są w stanie usunąć sygnał, gdy ktoś, kto był w stanie na niego czekać, został przebudzony. Nawet interfejsy API mogą zezwolić na blokowanie opcji, dopóki nie zostanie zasygnalizowane jedno lub wszystkie różne zdarzenia. Ponadto zdarzenia są obiektami jądra. Nie są "lżejsze" w porównaniu do muteksów. Zdarzenie jest w zasadzie obiektem jądra mającym dwa stany. Normalnie zdarzenie sygnalizuje nadejście zdarzenia, a czasem nawet zakończenie operacji wejścia / wyjścia.

"Mutex" oznacza Wzajemne wykluczenie. Jest to forma skoordynowanego mechanizmu koordynacji zasobów, które są udostępniane. Pomyśl o tym jako o formie transakcji. Nie musisz czekać, chociaż chcesz uzyskać dostęp do kilku współdzielonych zasobów (tylko w przypadku, gdy inni już mają do niego dostęp), które blokujesz. Muteks składa się z dwóch stanów, chociaż istnieje w celu wprowadzenia w życie wzajemnego wykluczenia. Ma to na celu ochronę odcinka kodu, który zazwyczaj aktualizuje udostępniony zasób z części, w której muteks jest przypisany do części, w której zostanie wydany. Prowadzi to do tego, że żaden inny wątek nie może przejść przez sekcję.

Ludzie, którzy próbowali zasymulować zdarzenie przy pomocy muteksu, musieli napotkać problem, w którym po uzyskaniu blokady lub sygnalizowaniu zdarzenia, osoba pozostawia wszystkich do momentu zwolnienia blokady. Nie jest to semantyka zdarzenia sygnalizowanego. Zdarzenie może pozostać zaksięgowane, a dla wszystkich testów wątków będzie dostępna forma bramki w przypadku braku blokad. Mutex zobowiązany do synchronizacji międzyprocesowej znajduje się w obiekcie trybu jądra. Zdarzenia wykonane dla synchronizacji wielowątkowej w ramach jednej metody znajdują się w obiekcie trybu użytkownika.

Obiekt Mutex jest zbyt ciężki i zbyt ogólny. Obiekty zdarzeń są znacznie lżejsze. Synchronizacja w trybie użytkownika jest używana w większości sytuacji, ponieważ zapewnia mniej cykli procesora. Mutex jest bardzo podobny do sekcji krytycznej i służy do synchronizowania dostępu do zasobów, które są współużytkowane. Zdarzenia mają zupełnie inną funkcję, ponieważ są używane do synchronizowania zadań lub zarządzania harmonogramami zadań dla niektórych osób.

Zdarzenia są bardziej zmienną warunku, w przeciwieństwie do Mutex, która jest bardziej podobna do monitorować w niektórych terminologii lub może być tradycyjną formą semafora / muteksa.

Streszczenie:

1. Opcja zdarzenia jest w stanie nadać wątkom opcję blokowania aż do nadania zdarzenia, stąd nazwa "zdarzenie".

2. Zdarzenie jest w zasadzie obiektem jądra mającym dwa stany. Normalnie zdarzenie sygnalizuje nadejście zdarzenia, a czasem nawet zakończenie operacji wejścia / wyjścia.

3. "Mutex" oznacza wzajemne wykluczenie. Jest to forma skoordynowanego mechanizmu koordynacji zasobów, które są udostępniane.

4.Mutex zobowiązany do synchronizacji międzyprocesowej znajduje się w obiekcie trybu jądra. Zdarzenia wykonane dla synchronizacji wielowątkowej w ramach jednej metody znajdują się w obiekcie trybu użytkownika.

5. Zdarzenia są bardziej zmienną warunku, w przeciwieństwie do Mutex, która jest bardziej podobna do a monitorować w niektórych terminologii lub może być tradycyjną formą semafora / muteksa.