Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 49134|Svare: 4

[Kilde] .NET/C# Lock Principle Monitor gir en grundig forklaring

[Kopier lenke]
Publisert på 29.04.2021 09:54:10 | | | |
Lock-setningen tar mutexen til et gitt objekt, utfører en statement-blokk, og frigjør deretter låsen. Når man holder en lås, kan gjengen som holder låsen ta opp og slippe låsen igjen. Enhver annen tråd er blokkert fra å få låsen og venter til låsen er frigjort.

Anmeldelse:

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

Bruk låsekoden

Ekvivalent med

Det kan antas at den underliggende koden i Lock er implementert av Monitor.

Siden koden bruker try... Finalblock, så selv om et unntak legges inn i selve låssetningen, frigjøres låsen.

Du kan ikke bruke await-operatorlåsen i selve uttalelsen.Du kan ikke bruke det i selve uttalelsenventOperatørlås。 Du kan ikke bruke await-operatorlåsen i selve uttalelsen. Du kan ikke bruke await-operatorlåsen i selve uttalelsen. Denne setningen er veldig viktig!

Dokumentasjon:Innloggingen med hyperkoblingen er synlig.

Jeg tester koden selv,Bruk Oppgave for å få låsen og bruk vent på å blokkere, koden er som følger:

Etter å ha kjørt følgende kode flere ganger, er resultatet ikke som forventet.



Hvorfor? Hvis du prøver å bruke await-nøkkelordet når du prøver å bruke await-nøkkelordet i låseblokken, vil du få denne kompileringsfeilen: cannot await i selve delen av en lock-setning. Årsaken er at etter at await er fullført, kan metoden kjøre i en annen tråd i stedet for tråden (som kaller tråden) før await-nøkkelordet.lockkeywordSamme trådFå lås og slipp lås i låsen
Endre koden for å se grunnen mer intuitivt:

Få gjenge-id på låsen og tråd-id på låsefrigjøreren,Selvfølgelig ikke i en tråd, så låsen kan ikke åpnes med hell, som vist i figuren nedenfor:



Prøvde å endre koden, testet med tråd, kjørte flere ganger, og det fungerte som forventet, koden er som følger:



(Slutt)





Foregående:(to).NET/C# for å pakke mappen inn i en zip-fil
Neste:Redis bruker Lua-skript for detaljerte forklaringer
 Vert| Publisert på 10.02.2022 09:20:09 |

Ikke slipp låsen





 Vert| Publisert på 25.06.2023 19:57:43 |
Objektsynkroniseringsmetoden ble kalt fra en usynkronisert kodeblokk.
Følgende kode vil gi en feil som ovenfor




 Vert| Publisert på 12.08.2023 19:47:49 |
Låsesyntaks-sukker, som vist nedenfor:






 Vert| Publisert på 11.07.2024 10:44:02 |
【Turn】C# flertrådet samtidighet under ulike låser
https://www.itsvse.com/thread-10561-1-1.html
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com