byłem pod wrażeniem po przeczytaniu this article że lepiej jest użyć Monitora/lock do synchronizacji wątków, ponieważ nie korzysta z rodzimych zasobówmonitora vs WaitHandle oparciu synchronizacji wątek
Specific cytat (od strony 5 tego artykułu):
Monitora/Impuls nie jest jedynym sposobem czekania na coś się stało w jednym wątku i mówienie tego wątku, że stało się to w innym. Programiści Win32 od dłuższego czasu stosują różne inne mechanizmy i są one ujawniane przez klasy AutoResetEvent, ManualResetEvent i Mutex, które pochodzą z WaitHandle. Wszystkie te klasy znajdują się w Przestrzeni nazw System.Threading. (Mechanizm Win32 Semaphore nie ma zarządzanego opakowania w .NET 1.1. Jest obecny w .NET 2.0, ale jeśli musisz go użyć wcześniej, możesz go zawinąć samodzielnie za pomocą P/Invoke lub napisać swój własny semafor klasa.)
Niektóre osoby mogą być zaskoczone tym, że używanie tych klas może być znacznie wolniejsze niż używanie różnych metod monitorowania. Wydaje mi się, że dzieje się tak dlatego, że "wychodzenie" z kodu zarządzanego do natywnych wywołań Win32 i powrót do "znowu" jest drogi w porównaniu z całkowicie zarządzanym widokiem rzeczy, które zapewnia Monitor. Czytelnik wyjaśnił również, że monitory są implementowane w trybie użytkownika, podczas gdy użycie uchwytów oczekiwania wymaga przełączenia w tryb jądra, co jest dość kosztowne.
Ale odkąd odkryłem SO i przeczytałem kilka pytań/odpowiedzi tutaj zacząłem wątpić w moje rozumienie kiedy użyć każdego. Wydaje się, że wiele osób zaleca używanie Auto/ManualResetEvent w przypadkach, w których działałby Monitor.Wait/Pulse. Czy ktoś może mi wyjaśnić, kiedy synchronizacja oparta na WaitHandle powinna być używana przez Monitor?
Dzięki
bardzo dobre wyjaśnienie. –
Dzięki za wyjaśnienie, to ma sens. – Matt
Uwielbiam to miejsce ... możesz łatwo znaleźć i odpowiedzieć w ten sposób, co pozwoli Ci zaoszczędzić godziny poszukiwań dzięki książkom i artykułom ... –