Säikeisiin liittyvät käsitteet 1. Säikeiden synkronointi ManualResetEvent Set()-menetelmä asettaa tilan Signaled-muotoon Reset() asettaaksesi signaalin pois WaitOne() estää, kunnes signaali on olemassa, ja jos signaali on olemassa kutsun hetkellä WaitOnea, se ei estä AutoResetEvent Ero ManualResetEventiin on se, että AutoResetEvent.WaitOne() muuttaa automaattisesti tapahtumaobjektin tilaa, eli tapahtuman tila muuttuu aina, kun AutoResetEvent.WaitOne() suoritetaan. Signaali – > ei signaalia; Ei signaalia – > on signaali
example:
myResetEven.Set(), joka itse asiassa vastaa kytkintä, jos set()-metodia ei suoriteta, seuraava waitOne() ei pysty odottamaan ilmoitusta suorittaakseen sen, joten waitOne-lausetta ei suoriteta. Monitorointimenetelmä Wait() Pulse()-mekanismia käytetään säikeiden väliseen vuorovaikutukseen, ja kun objekti lähettää Monitor.Wait() -signaalin, säie, joka käyttää objektia, pysyy odotustilassa. kunnes se saa herätyssignaalin. Monitor.Pulse() lähetetään signaaleja odottavalle säikeelle. Toisin sanoen, kriittisellä alueella Monitor.Enter():n ja Monitor.Exit():n välillä, jotta objektin lukitus vapautetaan ja nykyinen säike estetään, se on jonossa odotustilassa.
Lukko eroaa Mutexista Lukitussynkronointi useiden säikeiden välillä Useiden säikeiden synkronointi Mutex-prosessien välillä tai useiden prosessien synkronointi .Net-monisäikeisessä ohjelmoinnissa käytetään usein AutoResetEvent- ja ManualResetEvent-luokkia, ja niiden käyttö on hyvin samankaltaista, mutta eroja on. Set-menetelmä siirtää signaalin lähetystilaan, Reset-menetelmä lähettää signaalin ei-lähetettyyn tilaan ja WaitOne odottaa signaalin lähettämistä. Konstruktorin alkuperäinen tila voidaan määrittää parametrin arvon perusteella, jos se on totta, se ei estä ja epätosi on estotila. Jos säie kutsuu WaitOne-metodia, säie saa signaalin ollessaan lähetystilassa ja jatkaa suoritustaan alaspäin. Erona on, että kutsun jälkeen AutoResetEvent.WaitOne() sallii vain yhden säikeen kerrallaan, ja kun säie saa signaalin, AutoResetEvent asettaa signaalin automaattisesti ei-lähetystilaan, ja muut WaitOnea kutsuvat säikeet voivat vain jatkaa odottamista. Toisin sanoen AutoResetEvent herättää vain yhden säikeen kerrallaan; ManualResetEvent voi herättää useita säikeitä, koska kun yksi säie kutsuu ManualResetEvent.Set()-metodia, muut säikeet, jotka kutsuvat WaitOnea, saavat signaalin jatkaa suoritusta, eikä ManualResetEvent automaattisesti aseta signaalia niin, ettei lähetä. Toisin sanoen, ellei ManualResetEvent.Reset()-metodia kutsuta manuaalisesti, ManualResetEvent pysyy signaalina ja ManualResetEvent voi herättää useita säikeitä samanaikaisesti jatkaakseen suoritusta. |