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

Utsikt: 20027|Svare: 0

[Kilde] C#-låsenøkkelordet markerer en blokk med setninger som et kritisk område ved å hente en mutex for et gitt objekt, og kjøre setningen, men...

[Kopier lenke]
Publisert på 31.12.2015 17:51:01 | | |
Låsenøkkelordet markerer en blokk med setninger som en kritisk sone ved å ta en mutex for et gitt objekt, utføre setningen, og deretter frigjøre låsen.

Lock-setningen bruker i hovedsak Monitor.Enter og Monitor.Exit, det vil si at Monitor.Enter(this) utføres når lock(this) kjøres, og Monitor.Exit(this) utføres på slutten av krølleparentesen. Hva betyr det? For ethvert objekt er den første delen av minnet adressen til alle metoder, og den andre delen er en indeks. Han peker på en SyncBlock i SyncBlock Cache-området i CLR-en. Hva betyr det? Det vil si, når du kjører Monitor.Enter(Object), hvis indeksverdien til objektet er negativ, velg en SyncBlock fra SyncBlock-cachen og plasser adressen dens i objektets indeks. Dette fullfører låsen merket av objektet, og de andre trådene vil utføre Monitor.Enter(object)-operasjonen igjen, som vil få en indeks med et positivt objekt, og deretter vente. Inntil indeksen blir negativ, det vil si at tråden bruker Monitor.Exit(object) for å gjøre indeksen negativ.

Det du må være oppmerksom på når du bruker lås:
1. lås kan ikke låse nullverdi Et objekt kan peke mot null, men null trenger ikke å frigjøres. (Se også: Forståelse av Full Null)
2.lock kan ikke låse strengtypen, selv om den også er en referansetype. Fordi strengtypen "hoveres" av CLR
Dette betyr at det bare finnes én instans av en gitt streng i hele programmet, og det samme objektet representerer teksten i alle tråder i alle kjørende applikasjonsdomener. Derfor, så lenge en lås plasseres på en streng med samme innhold hvor som helst i applikasjonsprosessen, vil alle forekomster av den strengen i applikasjonen være låst. Derfor er det best å låse private eller beskyttede medlemmer som ikke vil bli vedvart.
3. Locklock objektet er minnegrensen til en programblokk
4. Verditypen kan ikke låses, fordi "objekt frigjøres" i rødt i forrige tekst, og verditypen ikke er en referansetype
5.lock unngår å låse offentlige typer eller objekter som ikke kontrolleres av programmet.
For eksempel, hvis instansen er offentlig tilgjengelig, kan lås (dette) være problematisk fordi ukontrollert kode også kan låse objektet. Dette kan føre til deadlocks, der to eller flere tråder venter på å slippe samme objekt. Låsing av offentlige datatyper (i motsetning til objekter) kan også forårsake problemer av samme grunn.
Når man bruker lock(this), kan verdien av klassemedlemsvariabelen endres av metoden som ikke er i den kritiske sonen

Applikasjonsscenario: Det brukes ofte for å forhindre usikre unntak i verdien av offentlige variabler forårsaket av flertrådede operasjoner for å sikre operasjonssikkerheten









Foregående:Win8 starter SQL Server 2012-tjenesten
Neste:[Speed] IP-segment åpen port-skanner for rask skanningshastighet!!
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