Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 24045|Răspunde: 0

[Program de consolă] Învățarea volatilă a cuvintelor cheie în .net/C#

[Copiază linkul]
Postat pe 23.05.2018 11:23:40 | | | |
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.




Precedent:Descarcă unealta de colectare pachete smsniff 2.0 versiunea chineză
Următor:VS Remote Debug "Operațiunea de depanare durează mai mult decât se aștepta"
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com