MS link:Autentificarea cu hyperlink este vizibilă.
Cuvântul cheie volatil indică faptul că un câmp poate fi modificat prin executarea simultană a mai multor fire de execuție. Câmpurile declarate ca volatile nu sunt restricționate de optimizarea compilatorului (presupunând că sunt accesate printr-un singur fir de execuție). Acest lucru asigură că câmpul este redat cu cea mai recentă valoare în orice moment.
Modificatorul volatil este folosit de obicei pentru câmpurile accesate de mai multe fire de execuție, dar care nu serializează accesul folosind o instrucțiune lock.
Cuvintele cheie volatile pot fi aplicate următoarelor tipuri de câmpuri:
- Tipul de citare.
- Tipul pointer (într-un context nesigur). Rețineți că, deși pointerul în sine poate fi mutabil, obiectul către care indică nu poate fi mutabil. Cu alte cuvinte, "indicatorul către un obiect mutabil" nu poate fi declarat.
- Tipuri precum sbyte, byte, short, ushort, int, uint, char, float și bool.
- Un tip enum cu unul dintre următoarele tipuri de bază: byte, sbyte, short, ushort, int sau uint.
- Parametri generici de tip cunoscuți ca fiind tipuri de referință.
- IntPtr și UIntPtr.
Cuvintele cheie variabile pot fi aplicate doar câmpurilor unei clase sau structuri.Variabilele locale nu pot fi declarate volatile。
Fără prostii, scrie o buclă pentru a testa:
Hai să testăm de 10.000 de ori într-o buclă,s-a constatat că ieșirea valorilor a este corectă, dar,Nu explicăVolatile este sigur la filetPentru că, dacă îl testezi de mai multe ori, vei descoperi că vor exista erori de calcul! Pentru că există o șansă la un rezultat corect și o șansă la un rezultat greșit
Cod:
Să testăm din nou 100.000 de bucle, și putem vedea că valoarea lui a este incorectă, pentru că cu cât numărul de bucle este mai mic, cu atât șansa de eroare este mai mică, iar eroarea nu este atât de evidentă, la fel cum nu a existat nicio eroare după 10.000 de bucle chiar acum.
În acest moment, adăugăm un blocaj pentru testare și se poate observa că valoarea lui a este calculată corect, așa cum ne-am așteptat.
Cod:
Rezumat: volatilul nu garantează siguranța firului, așa cum se vede în exemplul de mai sus.
|