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

Widok: 24412|Odpowiedź: 1

[Źródło] Różnica między ManualResetEvent a AutoResetEvent wyuczona przez wątki C#

[Skopiuj link]
Opublikowano 31.05.2018 14:59:47 | | | |
Najpierw omówmy ManualResetEvent, a podczas dyskusji wplatę trochę treści AutoResetEvent, aby porównać:

ManualResetEvent może blokować jeden lub więcej wątków, aż do otrzymania sygnału nakazującego ManualResetEvent zaprzestanie blokowania bieżącego wątku.

Informacje o ManualResetEvent

.net/c# Wątki wątkowe Suspend and Resume przestarzałe rozwiązania
https://www.itsvse.com/thread-4769-1-1.html
(Źródło: Architect_Programmer)


Wyobraź sobie, że obiekt ManualResetEvent ma właściwość typu Boole'a, IsRelease, która decyduje, czy blokować bieżący wątek. Możemy ustawić tę właściwość podczas inicjalizacji, na przykład ManualResetEvent event=new ManualResetEvent(false); Oznacza to, że domyślną właściwością jest blokowanie bieżącego wątku.

Przykład kodu:



Zwróć uwagę na ważną różnicę między ManualResetEvent a AutoResetEvent:

Manual na pewno wyśle sygnał zarówno do gwintu 1, jak i 2,Auto wysyła sygnał tylko do jednego z nich losowo.

Dlaczego jeden nazywa się manualem, a drugi automatem? Myślę, że to pytanie, które zadaje wiele osób, a teraz się do niego przyjrzymy.

Po prostu now_manualResetEvent. set(); Myślę, że wszyscy rozumieją to zdanie, które można uznać za ustawienie właściwości IsRelease na prawdziwe

_manualResetEvent.WaitOne(); Nie blokuje już wątku 1 po odebraniu sygnału. Wartość IsRelease jest prawdziwa przez cały kolejny proces.Jeśli

Jeśli chcesz przywrócić wartość IsRelease do false, musisz ponownie wywołać metodę _manualResetEvent.Reset().

Jeśli jest to _autoResetEvent.set(), to _autoResetEvent.WaitOne() automatycznie ustawi wartość IsRelease na false.

Dlatego jeden nazywa się automatyczny, a drugi manualnym.



Kod testowy:







Poprzedni:. Najszybszy komponent do mapowania obiektów OOM w .NET, Tiny Mapper, w praktyce projektowej
Następny:Szczegółowe wyjaśnienie do debugowania w C# DEBUG – drukowanie i wyjście
 Ziemianin| Opublikowano 18.12.2024 20:30:44 |
Zarówno ManualResetEvent, jak i AutoResetEvent dziedziczą zEventWaitHandle, jak pokazano na poniższym rysunku:



Odniesienie:Logowanie do linku jest widoczne.

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