Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 17115|Svare: 0

[Kommunikasjon] Detaljert forklaring av AutoResetEvent i .net/c#

[Kopier lenke]
Publisert på 20.03.2018 13:19:01 | | |

Trådrelaterte konsepter
1. Trådsynkronisering
ManualResetEvent
Set()-metoden setter tilstanden til Signaled
Reset() for å sette den til null signal
WaitOne() vil blokkere til den har et signal, og hvis det er et signal på tidspunktet for å ringe WaitOne, vil den ikke blokkere
AutoResetEvent
Forskjellen fra ManualResetEvent er at AutoResetEvent.WaitOne() automatisk endrer tilstanden til hendelsesobjektet, det vil si at tilstanden til hendelsen endres hver gang AutoResetEvent.WaitOne() kjøres. Signal – > ingen signal; Ingen signal – > har et signal
example:


  
myResetEven.Set(), som faktisk er ekvivalent med en switch, hvis set()-metoden ikke kjøres, vil ikke følgende waitOne() kunne vente på varslingen for å la den kjøre, slik at setningen etter waitOne ikke blir utført.
Monitormetode
Wait() Pulse()-mekanismen brukes for intertrådinteraksjon; når et objekt sender ut Monitor.Wait(), vil tråden som får tilgang til objektet forbli i ventetilstanden. Inntil den får et oppvåkningssignal. Monitor.Pulse() brukes til å sende signaler til den ventende tråden.
Det vil si, i det kritiske området mellom Monitor.Enter() og Monitor.Exit(), for å frigjøre låsen på objektet og blokkere den nåværende tråden, er det i ventetilstand i køen.

Lock er annerledes enn Mutex
Låsesynkronisering mellom flere tråder
Synkronisering av flere tråder mellom Mutex-prosesser, eller synkronisering av flere prosesser
I .Net-multitrådet programmering brukes ofte AutoResetEvent- og ManualResetEvent-klassene, og bruken deres er svært lik, men det finnes forskjeller. Set-metoden setter signalet til send-tilstand, Reset-metoden setter signalet til ikke-send-tilstand, og WaitOne venter på at signalet skal bli sendt. Den opprinnelige tilstanden til konstruktøren kan bestemmes av parameterverdien; hvis den er sann, blokkerer den ikke, og falsk er blokkeringstilstanden. Hvis en tråd kaller WaitOne-metoden, mottar tråden signalet når den er i send-tilstanden og fortsetter å kjøre nedover. Forskjellen er at etter kallet tillater AutoResetEvent.WaitOne() bare én tråd å komme inn om gangen, og når en tråd får et signal, vil AutoResetEvent automatisk sette signalet til ingen send-tilstand, og de andre trådene som kaller WaitOne kan bare fortsette å vente. Det vil si at AutoResetEvent bare vekker én tråd om gangen; ManualResetEvent kan vekke flere tråder, fordi når én tråd kaller ManualResetEvent.Set()-metoden, får de andre trådene som kaller WaitOne signalet for å fortsette utførelsen, og ManualResetEvent setter ikke automatisk signalet til ikke å sende. Med andre ord, med mindre ManualResetEvent.Reset()-metoden kalles manuelt, vil ManualResetEvent forbli signalisert, og ManualResetEvent kan vekke flere tråder samtidig for å fortsette kjøringen.




Foregående:.har-filparsingverktøy og HARViewer
Neste:Implementasjon av distribuert lås for Zookeeper
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com