Mutex vs Event
W języku C # istnieje wiele różnych opcji synchronizacji wątków. Dwoma bardziej rozpowszechnionymi są muteks i zdarzenie. Jaka jest dokładnie różnica między tymi dwoma? Który jest lepszą opcją?
Opcja zdarzenia może dać wątkom opcję blokowania do momentu nadania zdarzenia, stąd nazwa „zdarzenie”. To tak samo, jak usypianie czegoś i budzenie go tylko wtedy, gdy wydarzy się coś ważnego. Zdarzenia różnią się od muteksów, ponieważ muteksy nie mają opcji ani funkcji sygnalizacji. Zdarzenia są w stanie usunąć sygnał, gdy ktoś, kto był w stanie na niego czekać, został obudzony. Nawet interfejsy API mogą zezwolić na opcję blokowania do momentu zasygnalizowania jednego lub wszystkich różnych zdarzeń. Ponadto zdarzenia są obiektami jądra. Nie są „lżejsze” w porównaniu do muteksów. Zdarzenie jest zasadniczo obiektem jądra mającym dwa stany. Zwykle zdarzenie sygnalizuje nadejście zdarzenia, a czasem nawet koniec operacji we / wy.
„Mutex” oznacza wzajemne wykluczenie. Jest to forma mechanizmu koordynacji o zasięgu dla współdzielonych zasobów. Potraktuj to jako formę transakcji. Nie musisz czekać, chociaż chcesz uzyskać dostęp do kilku współużytkowanych zasobów (tylko w przypadku, gdy inni już to robią) blokujesz. Muteks składa się z dwóch stanów, chociaż istnieje, aby wprowadzić w życie wzajemne wykluczenie. Dzieje się tak, gdy chcesz zabezpieczyć odcinek kodu, który zwykle aktualizuje udostępniony zasób od części, w której zastrzeżony jest muteks, 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 za pomocą muteksu, musieli napotkać problem, w którym jak tylko zamek zostanie przejęty lub zdarzenie zostanie zasygnalizowane, osoba ta powstrzymuje wszystkich do czasu, aż zamek zostanie zwolniony. To nie jest semantyka sygnalizowanego zdarzenia. Wydarzenie może pozostać opublikowane, a dla wszystkich testów wątków w przypadku braku blokad dostępna będzie forma bramki. Mutex zaangażowany w synchronizację międzyprocesową znajduje się w obiekcie trybu jądra. Zdarzenia wykonane dla synchronizacji wielowątkowej w ramach jednej metody są 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 stosowana w większości sytuacji, ponieważ zapewnia mniej cykli procesora. Mutex przypomina sekcję krytyczną i służy do synchronizacji dostępu do współdzielonych zasobów. Zdarzenia mają zupełnie inną funkcję, ponieważ są używane do synchronizacji zadań lub zarządzania harmonogramem zadań dla niektórych osób.
Zdarzenia są bardziej zmienną warunkową, w przeciwieństwie do Mutex, który bardziej przypomina
monitorować niektóre terminy lub może to być tradycyjna forma semafora / muteksu.
Streszczenie:
1. Opcja zdarzenia może dać wątkom opcję blokowania do momentu emisji zdarzenia, stąd nazwa „zdarzenie”.
2.Zdarzenie jest w zasadzie obiektem jądra mającym dwa stany. Zwykle zdarzenie sygnalizuje nadejście zdarzenia, a czasem nawet koniec operacji we / wy.
3. „Mutex” oznacza wzajemne wykluczenie. Jest to forma mechanizmu koordynacji o zasięgu dla współdzielonych zasobów.
4.Mutex zaangażowany w synchronizację międzyprocesową znajduje się w obiekcie trybu jądra. Zdarzenia wykonane dla synchronizacji wielowątkowej w ramach jednej metody są w obiekcie trybu użytkownika.
5.Wydarzenia są bardziej zmienną warunkową, w przeciwieństwie do Mutex, który bardziej przypomina
monitorować niektóre terminy lub może to być tradycyjna forma semafora / muteksu.