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ą. |