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

Udsigt: 49134|Svar: 4

[Kilde] .NET/C# Lock Principle Monitor giver en dybdegående forklaring

[Kopier link]
Opslået på 29/04/2021 09.54.10 | | | |
Lock-udsagnet tager mutexen af et givent objekt, udfører en statement-blok og frigiver derefter låsen. Når man holder en lås, kan gevinden, der holder låsen, tage og frigive låsen igen. Enhver anden tråd blokeres fra at få låsen og venter, indtil låsen bliver frigivet.

Anmeldelse:

.net/c# Bruger multitrådet samtidighedslås(streng){...} Detaljeret forklaring
https://www.itsvse.com/thread-7764-1-1.html

Brug låsekoden

Ækvivalent med

Man kan mene, at den underliggende kode i Lock er implementeret af Monitor.

Da koden bruger prøv... Finalblock, så selv hvis en undtagelse kastes i selve lock-sætningen, frigives locken.

Du kan ikke bruge await-operatorlåsen i selve udsagnet.Du kan ikke bruge det i selve udsagnetVentOperatørlås。 Du kan ikke bruge await-operatorlåsen i selve udsagnet. Du kan ikke bruge await-operatorlåsen i selve udsagnet. Denne sætning er meget vigtig!

Dokumentation:Hyperlink-login er synlig.

Jeg tester koden selv,Brug Opgave til at få låsen og brug 'vent på at blokere', koden er som følger:

Efter at have udført følgende kode flere gange, er resultatet ikke som forventet.



Hvorfor? Hvis du prøver at bruge await-nøgleordet i låseblokken, får du denne kompilationsfejl: cannot await i selve en lock-sætning. Årsagen er, at efter await er afsluttet, kan metoden køre i en anden tråd i stedet for tråden (der kalder tråden) før await-nøgleordet.lockkeywordSamme trådFå lås og frigiv lås i låsen
Ændr koden for at se årsagen mere intuitivt:

Få gevindiddet på låsen og gevindiddet på låsefrigiveren,Selvfølgelig ikke i en tråd, så låsen ikke kan ophæves med succes, som vist i figuren nedenfor:



Prøvede at ændre koden, testede med tråd, kørte flere gange, og det virkede som forventet, koden er som følger:



(Slut)





Tidligere:(to).NET/C# for at pakke mappen i en zip-fil
Næste:Redis bruger Lua-skrifter til detaljerede forklaringer
 Udlejer| Opslået på 10/02/2022 09.20.09 |

Lås ikke låsen





 Udlejer| Opslået på 25/06/2023 19.57.43 |
Objektsynkroniseringsmetoden blev kaldt fra en usynkroniseret kodeblok.
Følgende kode vil give en fejl som ovenfor




 Udlejer| Opslået på 12/08/2023 19.47.49 |
Låsesyntaks-sukker, som vist nedenfor:






 Udlejer| Opslået på 11/07/2024 10.44.02 |
【Turn】C# multi-trådet samtidighed under forskellige låse
https://www.itsvse.com/thread-10561-1-1.html
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