MS Link:Hyperlink-login er synlig.
Det flygtige nøgleord angiver, at et felt kan ændres af flere tråde, der kører samtidig. Felter, der er erklæret flygtige, er ikke begrænset af compileroptimering (forudsat at de tilgås af en enkelt tråd). Dette sikrer, at feltet altid gengives med den nyeste værdi.
Den flygtige modifikator bruges typisk for felter, der tilgås af flere tråde, men som ikke serialiserer adgangen med en låsesætning.
Flygtige nøgleord kan anvendes på følgende typer felter:
- Kildetype.
- Pointer-type (i en usikker kontekst). Bemærk, at mens pointeren selv kan være foranderlig, kan objektet, den peger på, ikke være foranderligt. Med andre ord kan "peger på et foranderligt objekt" ikke erklæres.
- typer som Sbyte, Byte, Short, Ushort, Int, Uint, Char, Float og Boool.
- En enum-type med en af følgende basistyper: byte, sbyte, short, ushort, int eller uint.
- Generiske typeparametre, der er kendt for at være referencetyper.
- IntPtr og UIntPtr.
Variable nøgleord kan kun anvendes på felter i en klasse eller struktur.Lokale variable kan ikke erklæres som flygtige。
Ikke mere vrøvl, skriv en løkke for at teste den:
Lad os teste det 10.000 gange i en løkke,fandt, at outputtet af en værdi er korrekt, men,Det forklarer ikkeVolatile er trådsikkerFor hvis du tester det mange gange, vil du opdage, at der vil være beregningsfejl! Fordi der er en chance for et korrekt resultat og en chance for et forkert resultat
Kodeks:
Lad os teste 100.000 løkker igen, og vi kan finde, at værdien af a er forkert, fordi jo færre løkker der er, desto mindre er chancen for fejl, og fejlen er ikke så åbenlys, ligesom der ikke var nogen fejl efter 10.000 løkker lige nu.
På dette tidspunkt tilføjer vi en lås for at teste, og det kan ses, at værdien af a beregnes korrekt, som vi forventede.
Kodeks:
Resumé: Volatile garanterer ikke trådsikkerhed, som du kan se i eksemplet ovenfor.
|