Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 17115|Svar: 0

[Kommunikation] Detaljeret forklaring af AutoResetEvent i .net/c#

[Kopier link]
Opslået på 20/03/2018 13.19.01 | | |

Trådrelaterede begreber
1. Trådsynkronisering
ManualResetEvent
Set()-metoden sætter tilstanden til Signaleret
Reset() for at sætte den til ingen signal
WaitOne() vil blokere, indtil den har et signal, og hvis der er et signal på tidspunktet for opkaldet til WaitOne, vil den ikke blokere
AutoResetEvent
Forskellen fra ManualResetEvent er, at AutoResetEvent.WaitOne() automatisk ændrer tilstanden på begivenhedsobjektet, det vil sige, at tilstanden af begivenheden ændrer sig hver gang AutoResetEvent.WaitOne() udføres. Signal - > intet signal; Intet signal – > har et signal
example:


  
myResetEven.Set(), som faktisk svarer til en switch, hvis set()-metoden ikke udføres, vil den følgende waitOne() ikke kunne vente på notifikationen for at lade den køre, så sætningen efter waitOne ikke bliver udført.
Monitor-metoden
Wait() Pulse()-mekanismen bruges til intertrådsinteraktion; når et objekt udsender Monitor.Wait(), vil tråden, der tilgår objektet, forblive i ventetilstanden. indtil den får et vækningssignal. Monitor.Pulse() bruges til at sende signaler til den ventende tråd.
Det vil sige, i det kritiske område mellem Monitor.Enter() og Monitor.Exit(), for at frigive låsen på objektet og blokere den aktuelle tråd, er den i en ventetilstand i køen.

Lock er anderledes end Mutex
Låsesynkronisering mellem flere tråde
Synkronisering af flere tråde mellem Mutex-processer, eller synkronisering af flere processer
I .Net multithreaded programmering bruges ofte klasserne AutoResetEvent og ManualResetEvent, og deres anvendelse er meget lignende, men der er forskelle. Set-metoden sætter signalet i send-tilstanden, Reset-metoden sætter signalet i ikke-send-tilstanden, og WaitOne venter på, at signalet bliver sendt. Konstruktørens initialtilstand kan bestemmes af parameterværdien; hvis den er sand, blokerer den ikke, og falsk er blokeringstilstanden. Hvis en tråd kalder WaitOne-metoden, modtager tråden signalet, når den er i send-tilstanden, og fortsætter med at udføre nedad. Forskellen er, at efter opkaldet tillader AutoResetEvent.WaitOne() kun én tråd at komme ind ad gangen, og når en tråd modtager et signal, vil AutoResetEvent automatisk sætte signalet til ingen send-tilstand, og de andre tråde, der kalder WaitOne, kan kun fortsætte med at vente. Det vil sige, AutoResetEvent vækker kun én tråd ad gangen; ManualResetEvent kan vække flere tråde, fordi når én tråd kalder ManualResetEvent.Set()-metoden, får de andre tråde, der kalder WaitOne, signalet for at fortsætte eksekveringen, og ManualResetEvent sætter ikke automatisk signalet til ikke at sende. Med andre ord, medmindre ManualResetEvent.Reset()-metoden kaldes manuelt, vil ManualResetEvent forblive signaleret, og ManualResetEvent kan vække flere tråde samtidig for at fortsætte eksekveringen.




Tidligere:.har-filparseringsværktøj og HARViewer
Næste:Zookeeper distribueret låseimplementering
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com