MS Link:Innloggingen med hyperkoblingen er synlig.
Det flyktige nøkkelordet indikerer at et felt kan endres av flere tråder som kjører samtidig. Felt deklarert som flyktige er ikke begrenset av kompilatoroptimalisering (forutsatt at de aksesseres av en enkelt tråd). Dette sikrer at feltet alltid gjengis med den nyeste verdien.
Den flyktige modifikatoren brukes vanligvis for felt som brukes av flere tråder, men som ikke serialiserer tilgangen med en låsesetning.
Flyktige nøkkelord kan brukes på følgende typer felt:
- Siteringstype.
- Pekertype (i en usikker kontekst). Merk at mens pekeren selv kan være foranderlig, kan objektet den peker på ikke være foranderlig. Med andre ord kan ikke «peker til et foranderlig objekt» erklæres.
- typer som sbyte, byte, short, ushort, int, uint, uint, char, float og bool.
- En enum-type med en av følgende basetyper: byte, sbyte, short, ushort, int eller uint.
- Generiske typeparametere som er kjent for å være referansetyper.
- IntPtr og UIntPtr.
Variable nøkkelord kan kun brukes på felt i en klasse eller struktur.Lokale variabler kan ikke erklæres som flyktige。
Ikke mer tull, skriv en løkke for å teste den:
La oss teste det 10 000 ganger i en løkke,fant at utdataene til en verdi er korrekte, men,Det forklarer ikkeVolatile er trådsikkerFor hvis du tester det mange ganger, vil du oppdage at det oppstår regnefeil! Fordi det er en sjanse for et korrekt resultat og en sjanse for et feil resultat
Kode:
La oss teste 100 000 løkker igjen, og vi kan finne at verdien av a er feil, fordi jo færre løkker det er, desto mindre er sjansen for feil, og feilen er ikke så åpenbar, akkurat som det ikke var noen feil etter 10 000 løkker nettopp.
På dette tidspunktet legger vi til en lås for å teste, og det kan sees at verdien av a beregnes korrekt som forventet.
Kode:
Sammendrag: Volatile garanterer ikke trådsikkerhet, som du kan se i eksempelet over.
|