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

Udsigt: 20027|Svar: 0

[Kilde] C#-låsenøgleordet markerer en blok af sætninger som et kritisk område ved at opnå en mutex for et givent objekt og udføre sætningen, men...

[Kopier link]
Opslået på 31/12/2015 17.51.01 | | |
Lock-nøgleordet markerer en blok af sætninger som en kritisk zone ved at tage en mutex for et givent objekt, udføre sætningen og derefter frigive låsen.

Lock-sætningen bruger grundlæggende Monitor.Enter og Monitor.Exit, det vil sige, Monitor.Enter(this) bliver udført, når lock(this) udføres, og Monitor.Exit(this) udføres i slutningen af curly-krimset. Hvad betyder det? For ethvert objekt er den første del af hukommelsen adressen på alle metoder, og den anden del er et indeks. Han peger på en SyncBlock i SyncBlock Cache-området i CLR'en. Hvad betyder det? Det vil sige, når du udfører Monitor.Enter(Object), hvis objektets indeksværdi er negativ, vælger du en SyncBlock fra SyncBlock cachen og placerer dens adresse i objektets indeks. Dette fuldender låsen markeret af objekt, og de andre tråde vil udføre Monitor.Enter(object)-operationen igen, hvilket får et indeks med et positivt objekt, og derefter venter. Indtil indekset bliver negativt, dvs. tråden bruger Monitor.Exit(object) til at gøre indekset negativt.

Hvad du skal være opmærksom på, når du bruger lås:
1. lås kan ikke låse nullværdi Et objekt kan pege på null, men null behøver ikke frigives. (Se også: Forståelse af fuld null)
2.lock kan ikke låse strengtypen, selvom den også er en referencetype. Fordi strengtypen "hoveres" af CLR
Det betyder, at der kun er én instans af en given streng i hele programmet, og det samme objekt repræsenterer teksten i alle tråde i alle kørende applikationsdomæner. Derfor, så længe der placeres en lås på en streng med samme indhold et sted i applikationsprocessen, vil alle forekomster af den streng i applikationen være låst. Derfor er det bedst at låse private eller beskyttede medlemmer, som ikke vil blive vedvarende.
3. Locklock, objektet er hukommelsesgrænsen for en programblok
4. Værditypen kan ikke låses, fordi "objektet frigives" i rødt i den forrige tekst, og værditypen ikke er en referencetype
5.lock undgår at låse offentlige typer eller objekter, som ikke styres af programmet.
For eksempel, hvis instansen er offentligt tilgængelig, kan lås (dette) være problematisk, fordi ukontrolleret kode også kan låse objektet. Dette kan føre til deadlocks, hvor to eller flere tråde venter på at frigive det samme objekt. At låse offentlige datatyper (i modsætning til objekter) kan også forårsage problemer af samme grund.
Når man bruger lock(this), kan værdien af klassemedlemsvariabelen ændres af den metode, der ikke er i den kritiske zone

Applikationsscenarie: Det bruges ofte til at forhindre usikre undtagelser i værdien af offentlige variabler forårsaget af multitrådede operationer for at sikre operationernes sikkerhed









Tidligere:Win8 starter SQL Server 2012-tjenesten
Næste:[Speed] IP-segment open port scanner for hurtig scanningshastighed!!
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