Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 17115|Odgovoriti: 0

[Komunikacija] Podrobna razlaga AutoResetEvent v .net/c#

[Kopiraj povezavo]
Objavljeno na 20. 03. 2018 13:19:01 | | |

Koncepti, povezani z nitmi
1. Sinhronizacija niti
DogodekManualResetEvent
Metoda Set() nastavi stanje na Signaled
Reset() nastavite na brez signala
WaitOne() blokira, dokler ne dobi signala, in če je signal ob klicu WaitOne, ga ne bo blokiral
AutoResetEvent
Razlika od ManualResetEvent je v tem, da AutoResetEvent.WaitOne() samodejno spremeni stanje objekta dogodka, torej se stanje dogodka spremeni vsakič, ko se izvede AutoResetEvent.WaitOne(). Signal - > brez signala; Brez signala – > ima signal
example:


  
myResetEven.Set(), ki je dejansko ekvivalenten stikalu, če metoda set() ni izvedena, naslednji waitOne() ne bo mogel počakati na obvestilo, da bi se izvedel, zato stavka po waitOne ne bo izveden.
Metoda monitorja
Mehanizem Wait() Pulse() se uporablja za interakcijo med nitmi, ko objekt oddaja Monitor.Wait(), nit, ki dostopa do objekta, ostane v stanju čakanja. dokler ne dobi signala za prebujanje. Monitor.Pulse() se uporablja za pošiljanje signalov v čakajočo nit.
To pomeni, da je v kritičnem območju med Monitor.Enter() in Monitor.Exit(), da se sprosti zaklep na objektu in blokira trenutna nit, ta v čakalnem stanju v vrsti.

Lock je drugačen od Mutexa
Sinhronizacija zaklepanja med več nitmi
Sinhronizacija več niti med Mutex procesi ali sinhronizacija več procesov
V .Net večnitnem programiranju se pogosto uporabljata razreda AutoResetEvent in ManualResetEvent, njuna uporaba je zelo podobna, vendar obstajajo razlike. Metoda Set prenese signal v stanje pošiljanja, metoda Reset signal v stanje brez pošiljanja, WaitOne pa počaka, da se signal pošlje. Začetno stanje konstruktorja lahko določimo z vrednostjo parametra, če je resnično, ne blokira, in false je blokirajoče stanje. Če nit kliče metodo WaitOne, nit prejme signal, ko je v stanju pošiljanja, in nadaljuje z izvajanjem navzdol. Razlika je v tem, da po klicu AutoResetEvent.WaitOne() dovoli vstop le eni niti naenkrat, in ko nit prejme signal, AutoResetEvent samodejno preusmeri signal v stanje brez pošiljanja, druge niti, ki kličejo WaitOne, pa lahko le še naprej čakajo. To pomeni, da AutoResetEvent prebudi le eno nit naenkrat; ManualResetEvent lahko prebudi več niti, ker ko ena nit pokliče metodo ManualResetEvent.Set(), druge niti, ki kličejo WaitOne, dobijo signal za nadaljevanje izvajanja, ManualResetEvent pa samodejno ne nastavi signala, da se ne pošlje. Z drugimi besedami, razen če metoda ManualResetEvent.Reset() ni poklicana ročno, bo ManualResetEvent ostal signaliziran in ManualResetEvent lahko hkrati prebudi več niti za nadaljevanje izvajanja.




Prejšnji:.har orodje za razčlenjevanje datotek in HARViewer
Naslednji:Implementacija razpršenih ključavnic Zookeeper
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com