Thread.Suspend har avskaffats. Använd andra klasser i System.Threading, såsom Monitor, Mutex, Event och Semaphore, för att synkronisera trådar eller skydda resurser. Inloggningen med hyperlänken är synlig. Tråd. CV har föråldrats. Använd andra klasser i System.Threading, såsom Monitor, Mutex, Event och Semaphore, för att synkronisera trådar eller skydda resurser. Inloggningen med hyperlänken är synlig. Om tråden vill pausa eller fortsätta har jag använt de två metoderna Suspend och Resume tidigare, och använder dessa två metoder för att köra tråden, vilket faktiskt är problematiskt, och jag brydde mig inte om det då, så låt oss ta fram det och studera det idag!
Vad är problemet med att använda ovanstående två metoder för att suspendera och fortsätta trådar?
Till exempel, om vi anropar Suspend-metoden för att suspenda tråden, och sedan omedelbart anropar Resume-metoden för att fortsätta den suspenderade tråden, kan det uppstå ett problem.
För efter att du anropat Suspend-metoden för att suspendera tråden kanske tråden inte stängs omedelbart, här tar det bearbetningstid, vid denna tidpunkt anropar du omedelbart Resume-metoden för att fortsätta den avstängda tråden, och programmet hänger direkt!
Microsofts förklaring är:
Använd inte metoderna Suspend och Resume för att synkronisera trådaktivitet. Finns det något sätt att veta vilken kod som är när du pausar trådens körning? Om du håller ett lås under utvärdering av säkerhetsprivilegier kan andra trådar i din avstängda tråd i AppDomain blockeras. Om du pausar andra trådar i AppDomain när du kör klasskonstruktören blockeras försök att använda klassen. Dödlägen kan lätt uppstå.
// Sammanfattning: Fortsätt med den avstängda tråden. // Anomali: T:System.Threading.ThreadStateException: Tråden är inte påbörjad, död eller i väntande tillstånd. // T:System.Security.SecurityException: Anroparen har inte rätt System.Security.Permissions.SecurityPermission. [Föråldrad("Tråd.CV har avskaffats. Använd andra klasser i System.Threading, såsom Monitor, Mutex, Event och Semaphore, för att synkronisera trådar eller skydda resurser. Inloggningen med hyperlänken är synlig.", falsk)] [SecuritySafeCritical] offentlig tomma CV(); Hur löser man detta problem?
ManualResetEvent-klassen
Meddela en eller flera väntande trådar om att en händelse har inträffat. Sådana typer kan inte ärvas.
Testkoden är följande:
|