Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 24045|Svar: 0

[Konsolprogram] flyktig nyckelordsinlärning i .net/C#

[Kopiera länk]
Publicerad på 2018-05-23 11:23:40 | | | |
MS Link:Inloggningen med hyperlänken är synlig.

Det flyktiga nyckelordet indikerar att ett fält kan modifieras av flera trådar som körs samtidigt. Fält som deklareras som flyktiga begränsas inte av kompilatoroptimering (förutsatt att de nås av en enda tråd). Detta säkerställer att fältet alltid renderas med det senaste värdet.

Den flyktiga modifieraren används vanligtvis för fält som nås av flera trådar men som inte serialiserar åtkomsten med en lock-sats.

Flyktiga nyckelord kan tillämpas på följande typer av fält:

  • Citationstyp.
  • Pekartyp (i ett osäkert sammanhang). Observera att även om pekaren själv kan vara föränderlig, kan objektet den pekar på inte vara föränderligt. Med andra ord kan "pekare till ett föränderligt objekt" inte deklareras.
  • Typer som Sbyte, Byte, Short, Ushort, Int, Uint, Char, Float och Boool.
  • En enum-typ med en av följande bastyper: byte, sbyte, short, ushort, int eller uint.
  • Generiska typparametrar som är kända för att vara referenstyper.
  • IntPtr och UIntPtr.


Variabelnyckelord kan endast tillämpas på fält i en klass eller struktur.Lokala variabler kan inte deklareras som flyktiga


Inget mer nonsens, skriv en loop för att testa det:

Låt oss testa det 10 000 gånger i en loop,fann att utdata av ett värde är korrekt, men,Det förklarar inteVolatile är trådsäkerFör om du testar det många gånger kommer du att upptäcka att det finns beräkningsfel! För det finns en chans till ett korrekt resultat och en chans till ett felaktigt resultat



Kod:



Låt oss testa 100 000 loopar igen, och vi kan upptäcka att värdet på a är felaktigt, eftersom ju mindre antal loopar, desto mindre risk för fel, och felet är inte lika uppenbart, precis som det inte fanns något fel efter 10 000 loopar just nu.

Vid denna tidpunkt lägger vi till ett lås för att testa, och det kan ses att värdet av a beräknas korrekt som vi förväntade oss.



Kod:



Sammanfattning: volatile garanterar inte trådsäkerhet, som du kan se i exemplet ovan.




Föregående:Ladda ner paketplockningsverktyget smsniff 2.0 i kinesisk version
Nästa:VS Remote Debug "Debug-operationen tar längre tid än väntat"-lösning
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com