Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 17115|Svar: 0

[Kommunikation] Detaljerad förklaring av AutoResetEvent i .net/c#

[Kopiera länk]
Publicerad på 2018-03-20 13:19:01 | | |

Trådrelaterade koncept
1. Trådsynkronisering
ManualResetEvent
Set()-metoden sätter tillståndet till Signaled
Reset() för att ställa in signalen utan signal
WaitOne() kommer att blockera tills den har en signal, och om det finns en signal vid tidpunkten för att ringa WaitOne kommer den inte att blockera
AutoResetEvent
Skillnaden från ManualResetEvent är att AutoResetEvent.WaitOne() automatiskt ändrar tillståndet för händelseobjektet, det vill säga att tillståndet för händelsen ändras varje gång AutoResetEvent.WaitOne() körs. Signal – > ingen signal; Ingen signal – > har en signal
example:


  
myResetEven.Set(), som faktiskt är ekvivalent med en switch, om metoden set() inte körs, kommer följande waitOne() inte att kunna vänta på notifikationen för att låta den köras, så att satsen efter waitOne inte kommer att exekvera.
Monitormetoden
Wait() Pulse()-mekanismen används för intertrådsinteraktion, när ett objekt skickar ut Monitor.Wait(), kommer tråden som använder objektet att förbli i väntande tillstånd. tills den får en väckningssignal. Monitor.Pulse() används för att skicka signaler till den väntande tråden.
Det vill säga, i det kritiska området mellan Monitor.Enter() och Monitor.Exit(), för att släppa låset på objektet och blockera den aktuella tråden, befinner det sig i ett väntande tillstånd i kön.

Lock skiljer sig från Mutex
Låssynkronisering mellan flera trådar
Synkronisering av flera trådar mellan Mutex-processer, eller synkronisering av flera processer
I .Net multitrådad programmering används ofta klasserna AutoResetEvent och ManualResetEvent, och deras användning är mycket lik, men det finns skillnader. Set-metoden sätter signalen i sändningstillståndet, Reset-metoden sätter signalen i icke-sändningstillståndet, och WaitOne väntar på att signalen ska skickas. Konstruktörens initiala tillstånd kan bestämmas av parametervärdet, om det är sant är det inte blockerande, och falskt är blockeringstillståndet. Om en tråd anropar WaitOne-metoden får tråden signalen när den är i sändningstillståndet och fortsätter att köras nedåt. Skillnaden är att efter anropet tillåter AutoResetEvent.WaitOne() bara en tråd att komma in åt gången, och när en tråd får en signal kommer AutoResetEvent automatiskt att sätta signalen till inget sändningstillstånd, och de andra trådarna som anropar WaitOne kan bara fortsätta vänta. Det vill säga, AutoResetEvent väcker bara en tråd åt gången; ManualResetEvent kan väcka flera trådar, eftersom när en tråd anropar ManualResetEvent.Set()-metoden, får de andra trådarna som anropar WaitOne signalen att fortsätta körningen, och ManualResetEvent ställer inte automatiskt in signalen att inte skickas. Med andra ord, om inte ManualResetEvent.Reset()-metoden anropas manuellt, kommer ManualResetEvent att förbli signalerad och ManualResetEvent kan väcka flera trådar samtidigt för att fortsätta körningen.




Föregående:.har-filanalysverktyg och HARViewer
Nästa:Zookeeper distribuerad låsimplementering
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com