Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 17115|Atsakyti: 0

[Komunikatas] Išsamus AutoResetEvent paaiškinimas .net/c#

[Kopijuoti nuorodą]
Paskelbta 2018-03-20 13:19:01 | | |

Su siūlais susijusios sąvokos
1. Gijos sinchronizavimas
ManualResetEvent
Set() metodas nustato būseną į Signaled
Reset(), kad nustatytumėte signalą
"WaitOne() blokuos, kol turės signalą, o jei skambinant "WaitOne" bus signalas, jis neblokuos
AutoResetEvent
Skirtumas nuo ManualResetEvent yra tas, kad AutoResetEvent.WaitOne() automatiškai keičia įvykio objekto būseną, tai yra, įvykio būsena keičiasi kiekvieną kartą, kai vykdomas AutoResetEvent.WaitOne(). Signalas - > nėra signalo; Nėra signalo – > turi signalą
example:


  
myResetEven.Set(), kuris iš tikrųjų yra lygiavertis jungikliui, jei set() metodas nebus vykdomas, šis waitOne() negalės laukti, kol pranešimas leis jį vykdyti, todėl sakinys po waitOne nebus vykdomas.
Stebėjimo metodas
Wait() Pulse() mechanizmas naudojamas sąveikai tarp gijų, kai objektas skleidžia Monitor.Wait(), gija, kuri pasiekia objektą, išliks laukimo būsenoje. kol gaus pažadinimo signalą. Monitor.Pulse() naudojamas signalams siųsti į laukiančią giją.
Tai reiškia, kad kritinėje srityje tarp Monitor.Enter() ir Monitor.Exit(), norint atlaisvinti objekto užraktą ir užblokuoti dabartinę giją, jis yra laukimo būsenoje eilėje.

Užraktas skiriasi nuo Mutex
Užrakinti sinchronizavimą tarp kelių gijų
Kelių gijų sinchronizavimas tarp Mutex procesų arba kelių procesų sinchronizavimas
".Net" kelių gijų programavime dažnai naudojamos "AutoResetEvent" ir "ManualResetEvent" klasės, o jų naudojimas yra labai panašus, tačiau yra skirtumų. Nustatymo metodas perkelia signalą į siuntimo būseną, atstatymo metodas perkelia signalą į nesiuntimo būseną, o "WaitOne" laukia, kol signalas bus išsiųstas. Pradinę konstruktoriaus būseną galima nustatyti pagal parametro vertę, jei ji teisinga, ji neblokuoja, o klaidinga yra blokavimo būsena. Jei gija iškviečia WaitOne metodą, gija gauna signalą, kai ji yra siuntimo būsenoje ir toliau vykdoma žemyn. Skirtumas tas, kad po skambučio AutoResetEvent.WaitOne() vienu metu leidžia įvesti tik vieną giją, o kai gija gauna signalą, AutoResetEvent automatiškai perkels signalą į nesiuntimo būseną, o kitos gijos, skambinančios WaitOne, gali tik toliau laukti. Tai yra, "AutoResetEvent" vienu metu pažadina tik vieną giją; ManualResetEvent gali pažadinti kelias gijas, nes kai viena gija iškviečia ManualResetEvent.Set() metodą, kitos gijos, iškviečiančios WaitOne, gauna signalą tęsti vykdymą, o ManualResetEvent automatiškai nenustato signalo nesiųsti. Kitaip tariant, jei ManualResetEvent.Reset() metodas neiškviečiamas rankiniu būdu, ManualResetEvent išliks signalizuotas, o ManualResetEvent gali pažadinti kelias gijas vienu metu, kad tęstų vykdymą.




Ankstesnis:.har failų analizės įrankis ir HARViewer
Kitą:Zookeeper paskirstyto užrakto įgyvendinimas
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com