Różnica między mutexem a zdarzeniem

Różnica między mutexem a zdarzeniem

Mutex vs zdarzenie

W C#istnieje wiele różnych opcji synchronizacji wątków. Dwa bardziej stosowane są mutex i zdarzenie. Właśnie jaka jest różnica między tymi dwoma? Który jest lepszą opcją?

Opcja zdarzenia jest w stanie dać wątkom opcję zablokowania, dopóki wydarzenie nie zostanie nadawane, a więc nazwa „Wydarzenie.„Jest to samo, co umieszczenie czegoś i budzenie się tylko wtedy, gdy dzieje się coś znaczącego. Zdarzenia są różne od mutexy, ponieważ muteksy nie mają opcji sygnalizacji ani funkcji. Wydarzenia są w stanie wyczyścić sygnał, gdy ktoś, kto mógł na niego poczekać, został obudzony. Nawet interfejsy API mogą pozwolić na blokowanie opcji, aż jeden lub wszystkie różne zdarzenia nie zostaną zasygnalizowane. Ponadto zdarzenia są obiektami jądra. Nie są „lżejsze” w porównaniu z mutexes. Wydarzenie to w zasadzie obiekt jądra o dwóch stanach. Zwykle zdarzenie sygnalizuje nadejście wydarzenia, a czasem nawet koniec operacji we/wy.

„Mutex” oznacza wzajemne wykluczenie. Jest to forma rozstrzygniętego mechanizmu koordynacji dla udostępnianych zasobów. Pomyśl o tym jak o formie transakcji. Nie jesteś zobowiązany do czekania, chociaż chcesz uzyskać dostęp do kilku wspólnych zasobów (tylko w przypadku, w którym inni już do niego uzyskują). Mutex składa się z dwóch stanów, chociaż istnieje wakacje. Dzieje się tak o, gdy chcesz chronić odcinek kodu, który zwykle aktualizuje wspólny zasób z części, w której Mutex jest zgłaszany do części, w której zostanie wydany. Prowadzi to do faktu, że żaden inny wątek nie może przejść przez sekcję.

Ludzie, którzy próbowali zasymulować wydarzenie za pomocą mutex, musieli napotkać problem, w którym jak tylko zamek zostanie nabyty lub zdarzenie zostało zasygnalizowane, osoba utrzymuje wszystkich innych, dopóki zamek się nie zostanie zwolniony. To nie jest semantyka zasygnalizowanego zdarzenia. Wydarzenie może pozostać opublikowane, a forma bramy będzie dostępna dla wszystkich testów wątków w przypadku, gdy nie ma żadnych zamków. Mutex zobowiązany do synchronizacji międzyprocesowej jest w obiekcie trybu jądra. Zdarzenia dokonane do wielowa synchronizacji 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 jaśniejsze. Synchronizacja w trybie użytkownika jest używana w większości sytuacji z powodu, dla którego daje mniej cykli procesora. Mutex jest bardzo podobny do sekcji krytycznej i służy do synchronizacji dostępu do wspólnych zasobów. Wydarzenia mają zupełnie inną funkcję, ponieważ są używane do synchronizacji zadań lub do zarządzania planowaniem zadań dla niektórych osób.

Zdarzenia są bardziej zmienną warunku, w przeciwieństwie do mutex, co jest bardziej jak a
monitoruj w niektórych terminologii lub może to być tradycyjna forma semaforu/mutex.

Streszczenie:

1.Opcja zdarzenia jest w stanie dać wątkom opcję zablokowania do momentu transmisji zdarzenia, a zatem nazwa „zdarzenie."

2.Wydarzenie to w zasadzie obiekt jądra o dwóch stanach. Zwykle zdarzenie sygnalizuje nadejście wydarzenia, a czasem nawet koniec operacji we/wy.

3.„Mutex” oznacza wzajemne wykluczenie. Jest to forma rozstrzygniętego mechanizmu koordynacji dla udostępnianych zasobów.

4.Mutex zobowiązany do synchronizacji międzyprocesowej jest w obiekcie trybu jądra. Zdarzenia dokonane do wielowa synchronizacji w ramach jednej metody znajdują się w obiekcie trybu użytkownika.

5.Zdarzenia są bardziej zmienną warunku, w przeciwieństwie do mutex, co jest bardziej jak a
monitoruj w niektórych terminologii lub może to być tradycyjna forma semaforu/mutex.