Niidiga seotud mõisted 1. Lõimede sünkroniseerimine ManualResetEvent Set() meetod seab olekuks Signaled Reset(), et seadistada signaali puudumine WaitOne() blokeerib signaali seni, kuni signaal on olemas, ja kui signaal on olemas WaitOne'i kutsumise ajal, siis see ei blokeeri AutoResetEvent Erinevus ManualResetEventist seisneb selles, et AutoResetEvent.WaitOne() muudab automaatselt sündmuse objekti olekut, st sündmuse seisund muutub iga kord, kui AutoResetEvent.WaitOne() käivitatakse. Signaal – > signaali pole; Signaali puudub – > on signaal
example:
myResetEven.Set(), mis on tegelikult lülitiga ekvivalentne, kui set() meetodit ei käivitata, ei saa järgmine waitOne() oodata teavitust, et see käivitataks, nii et waitOne'i järgne lause ei täitu. Monitori meetod Wait() Pulse() mehhanismi kasutatakse lõimedevaheliseks interaktsiooniks, kui objekt kiirgab Monitor.Wait(), jääb niit, mis objektile ligi pääseb, ooteolekusse. kuni ta saab äratussignaali. Monitor.Pulse() kasutatakse signaalide saatmiseks ootelõimele. See tähendab, et kriitilises piirkonnas Monitor.Enter() ja Monitor.Exit() vahel, et vabastada objekti lukk ja blokeerida praegune lõim, on see järjekorras ooterežiimis.
Lukustus erineb Mutexist Luku sünkroniseerimine mitme lõime vahel Mitme lõime sünkroniseerimine Mutex-protsesside vahel või mitme protsessi sünkroniseerimine .Net mitmelõimelise programmeerimise puhul kasutatakse sageli AutoResetEvent ja ManualResetEvent klasse ning nende kasutus on väga sarnane, kuid erinevusi esineb. Set-meetod viib signaali saatmisolekusse, Reset meetod suunab signaali mitte-saatmisolekusse ja WaitOne ootab signaali saatmist. Konstruktori algoleku saab määrata parameetri väärtuse järgi, kui see on tõene, siis see ei blokeeri ja vale on blokeeriv olek. Kui lõim kutsub WaitOne meetodit, saab lõim signaali saatmisolekus ja jätkab allapoole täitmist. Erinevus seisneb selles, et pärast kõnet lubab AutoResetEvent.WaitOne() korraga siseneda ainult ühel lõimel ning kui lõim saab signaali, paneb AutoResetEvent automaatselt signaali saatmata olekusse ning teised WaitOne'i kutsuvad lõimed saavad ainult edasi oodata. See tähendab, et AutoResetEvent äratab korraga ainult ühe lõime; ManualResetEvent võib äratada mitu lõime, sest kui üks lõim kutsub ManualResetEvent.Set() meetodit, saavad teised WaitOne'i kutsuvad lõimed signaali täitmise jätkamiseks ning ManualResetEvent ei sea automaatselt signaali mitte saatmiseks. Teisisõnu, kui ManualResetEvent.Reset() meetodit ei kutsuta käsitsi, jääb ManualResetEvent signaaliks ja ManualResetEvent saab korraga äratada mitu lõime, et jätkata täitmist. |