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. |