MS Link:De hyperlink-login is zichtbaar.
Het vluchtige trefwoord geeft aan dat een veld kan worden aangepast door meerdere threads die tegelijkertijd worden uitgevoerd. Velden die als vluchtig zijn gedeclareerd worden niet beperkt door compileroptimalisatie (ervan uitgaande dat ze door één enkele thread worden benaderd). Dit zorgt ervoor dat het veld altijd met de meest recente waarde wordt weergegeven.
De vluchtige modifier wordt doorgaans gebruikt voor velden die door meerdere threads worden benaderd, maar die de toegang niet serialiseren met een lock-instructie.
Vluchtige trefwoorden kunnen worden toegepast op de volgende soorten velden:
- Citatietype.
- Pointertype (in een onveilige context). Let op dat hoewel de pointer zelf veranderbaar kan zijn, het object waarnaar hij wijst niet veranderbaar kan zijn. Met andere woorden, "pointer to a mutable object" kan niet worden verklaard.
- Typen zoals Sbyte, Byte, Short, Ushort, Int, Uint, Char, Float en Boool.
- Een enum-type met een van de volgende basistypen: byte, sbyte, short, ushort, int of uint.
- Generieke typeparameters waarvan bekend is dat ze referentietypes zijn.
- IntPtr en UIntPtr.
Variabele trefwoorden kunnen alleen worden toegepast op velden van een klasse of structuur.Lokale variabelen kunnen niet als vluchtig worden verklaard。
Geen onzin meer, schrijf een lus om het te testen:
Laten we het 10.000 keer in een lus testen,vond dat de output van een waarde correct is, maar,Het verklaart het nietVolatile is thread-veiligWant als je het meerdere keren test, zul je merken dat er rekenfouten zullen zijn! Omdat er een kans is op een correct resultaat en een kans op een fout resultaat
Code:
Laten we 100.000 lussen opnieuw testen, en we kunnen ontdekken dat de waarde van a onjuist is, omdat hoe kleiner het aantal lussen, hoe kleiner de kans op fout, en de fout is minder duidelijk, net zoals er na 10.000 lussen net geen fout was.
Op dit moment voegen we een lock toe om te testen, en het is te zien dat de waarde van a correct is berekend zoals we verwachtten.
Code:
Samenvatting: vluchtig is geen garantie voor de veiligheid van de thread, zoals je kunt zien in het bovenstaande voorbeeld.
|