Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 17115|Odpowiedź: 0

[Komunikacja] Szczegółowe wyjaśnienie AutoResetEvent w .net/c#

[Skopiuj link]
Opublikowano 20.03.2018 13:19:01 | | |

Koncepcje związane z wątkami
1. Synchronizacja wątków
ManualResetEvent
Metoda Set() ustawia stan na Signaled
Reset(), aby ustawić na brak sygnału
WaitOne() zablokuje sygnał, a jeśli sygnał pojawi się w momencie wywołania WaitOne, nie zablokuje
AutoResetEvent
Różnica w stosunku do ManualResetEvent polega na tym, że AutoResetEvent.WaitOne() automatycznie zmienia stan obiektu zdarzenia, czyli stan zdarzenia zmienia się za każdym razem, gdy AutoResetEvent.WaitOne() zostanie wykonany. Sygnał - > brak sygnału; Brak sygnału – > ma sygnał
example:


  
myResetEven.Set(), który jest faktycznie równoważny przełącznikowi, jeśli metoda set() nie zostanie wykonana, następujący waitOne() nie będzie mógł poczekać na powiadomienie, aby umożliwić jej wykonanie, więc polecenie po waitOne nie zostanie wykonane.
Metoda monitorowania
Mechanizm Wait() Pulse() jest używany do interakcji między wątkami; gdy obiekt emituje Monitor.Wait(), wątek uzyskujący dostęp do obiektu pozostaje w stanie oczekiwania. aż dostanie sygnał pobudki. Monitor.Pulse() służy do wysyłania sygnałów do oczekującego wątku.
To znaczy, w krytycznym obszarze pomiędzy Monitor.Enter() a Monitor.Exit(), aby zwolnić blokadę obiektu i zablokować bieżący wątek, znajduje się on w stanie oczekiwania w kolejce.

Lock różni się od Mutex
Synchronizacja blokady między wieloma wątkami
Synchronizacja wielu wątków między procesami Mutex lub synchronizacja wielu procesów
W programowaniu wielowątkowym .Net często stosuje się klasy AutoResetEvent i ManualResetEvent, a ich użycie jest bardzo podobne, choć występują różnice. Metoda Set wprowadza sygnał do stanu wysyłania, metoda Reset do stanu niewysyłania, a WaitOne czeka na wysłanie sygnału. Początkowy stan konstruktora można określić na podstawie wartości parametru, jeśli jest prawdziwy, nie blokuje, a false jest stanem blokującym. Jeśli wątek wywoła metodę WaitOne, wątek otrzymuje sygnał, gdy jest w stanie wysyłania i kontynuuje wykonywanie w dół. Różnica polega na tym, że po wywołaniu AutoResetEvent.WaitOne() pozwala tylko na wejście jednego wątku naraz, a gdy wątek otrzyma sygnał, AutoResetEvent automatycznie przenosi sygnał do stanu braku wysłania, a pozostałe wątki wywołujące WaitOne mogą tylko dalej czekać. To znaczy, AutoResetEvent budzi tylko jeden wątek naraz; ManualResetEvent może wywołać wiele wątków, ponieważ gdy jeden wątek wywołuje metodę ManualResetEvent.Set(), pozostałe wątki wywołujące WaitOne otrzymują sygnał do kontynuowania wykonywania, a ManualResetEvent nie ustawia automatycznie sygnału na niewysłanie. Innymi słowy, jeśli metoda ManualResetEvent.Reset() nie zostanie wywołana ręcznie, ManualResetEvent pozostanie sygnalizowany i ManualResetEvent może obudzić wiele wątków jednocześnie, aby kontynuować wykonywanie.




Poprzedni:.har narzędzie do parsowania plików i HARViewer
Następny:Implementacja rozproszonych zamków Zookeeper
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com