Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 17115|Odpoveď: 0

[Komunikácia] Podrobné vysvetlenie AutoResetEvent v .net/c#

[Kopírovať odkaz]
Zverejnené 20. 3. 2018 13:19:01 | | |

Koncepty súvisiace s vláknami
1. Synchronizácia vlákien
Udalosť manuálneho resetovania
Metóda Set() nastaví stav na Signalizované
Reset() nastaviť na žiadny signál
WaitOne() zablokuje, kým nemá signál, a ak je signál v čase volania WaitOne, neblokuje
AutoResetEvent
Rozdiel oproti ManualResetEvent je v tom, že AutoResetEvent.WaitOne() automaticky mení stav objektu udalosti, teda stav udalosti sa mení zakaždým, keď sa spustí AutoResetEvent.WaitOne(). Signál - > žiadny signál; Žiadny signál – > má signál
example:


  
myResetEven.Set(), čo je v skutočnosti ekvivalentné prepínačovi, ak sa metóda set() nevykoná, nasledujúci waitOne() nebude môcť počkať na notifikáciu, aby sa vykonal, takže príkaz po waitOne nebude vykonaný.
Metóda monitorovania
Mechanizmus Wait() Pulse() sa používa na interakciu medzi vláknami, keď objekt vysiela Monitor.Wait(), vlákno, ktoré k objektu pristupuje, zostane v čakacom stave. až kým nedostane signál na prebudenie. Monitor.Pulse() sa používa na odosielanie signálov do čakajúceho vlákna.
To znamená, že v kritickej oblasti medzi Monitor.Enter() a Monitor.Exit(), aby sa uvoľnil zámok objektu a zablokovalo aktuálne vlákno, je v čakacom stave vo fronte.

Lock je iný ako Mutex
Synchronizácia zámku medzi viacerými vláknami
Synchronizácia viacerých vlákien medzi Mutex procesmi alebo synchronizácia viacerých procesov
V .Net multithreaded programovaní sa často používajú triedy AutoResetEvent a ManualResetEvent, pričom ich použitie je veľmi podobné, ale existujú rozdiely. Metóda Set umiestni signál do odosielacieho stavu, metóda Reset ho presúva do stavu bez odoslania a WaitOne čaká na odoslanie signálu. Počiatočný stav konštruktora možno určiť hodnotou parametra, ak je true, nie je blokujúci a false je blokujúci stav. Ak vlákno zavolá metódu WaitOne, vlákno dostane signál, keď je v stave odosielania, a pokračuje v vykonávaní smerom nadol. Rozdiel je v tom, že po volaní AutoResetEvent.WaitOne() umožňuje vstup len jednému vláknu naraz, a keď vlákno dostane signál, AutoResetEvent automaticky preradí signál do stavu bez odoslania, zatiaľ čo ostatné vlákna volajúce WaitOne môžu len pokračovať v čakaní. To znamená, že AutoResetEvent prebúdza len jedno vlákno naraz; ManualResetEvent môže prebudiť viacero vlákien, pretože keď jedno vlákno volá metódu ManualResetEvent.Set(), ostatné vlákna volajúce WaitOne dostanú signál na pokračovanie vykonávania a ManualResetEvent automaticky nenastaví signál na neodoslanie. Inými slovami, pokiaľ metóda ManualResetEvent.Reset() nie je volaná manuálne, ManualResetEvent zostane signalizovaný a ManualResetEvent môže naraz prebudiť viacero vlákien na pokračovanie vykonávania.




Predchádzajúci:.har nástroj na parsovanie súborov a HARViewer
Budúci:Implementácia distribuovaného zámku Zookeeper
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com