Odkaz na MS:Prihlásenie na hypertextový odkaz je viditeľné.
Volatilné kľúčové slovo naznačuje, že pole môže byť modifikované viacerými vláknami vykonávajúcimi súčasne. Polia deklarované ako volatilné nie sú obmedzené optimalizáciou kompilátora (za predpokladu, že k nim pristupuje jedno vlákno). To zabezpečuje, že pole je vždy zobrazené s najnovšou hodnotou.
Volatilný modifikátor sa typicky používa pre polia, ku ktorým pristupuje viacero vlákien, ale neserializujú prístup pomocou príkazu lock.
Volatilné kľúčové slová možno aplikovať na nasledujúce typy polí:
- Typ citácie.
- Typ ukazovateľa (v nebezpečnom kontexte). Všimnite si, že hoci samotný ukazovateľ môže byť premenlivý, objekt, na ktorý ukazuje, nemôže byť meniteľný. Inými slovami, "ukazovateľ na meniteľný objekt" nemôže byť vyhlásený.
- Typy ako sbyte, byte, short, ushort, int, uint, char, float a bool.
- Enum typ s jedným z nasledujúcich základných typov: bajt, sbyte, short, ushort, int alebo uint.
- Všeobecné typové parametre, ktoré sú známe ako referenčné typy.
- IntPtr a UIntPtr.
Premenné kľúčové slová možno aplikovať iba na polia triedy alebo štruktúry.Lokálne premenné nemožno deklarovať ako volatilné。
Žiadne ďalšie nezmysly, napíšte slučku na testovanie:
Otestujme to 10 000-krát v slučke,zistil, že výstup hodnôt a je správny, ale,Nevysvetľuje toVolatile je bezpečný pre nitePretože ak to otestujete viackrát, zistíte, že sa objavia chyby vo výpočte! Pretože existuje šanca na správny výsledok a šanca na nesprávny výsledok
Kód:
Otestujme znova 100 000 slučiek a zistíme, že hodnota a je nesprávna, pretože čím menší počet slučiek, tým menšia je pravdepodobnosť chyby, a chyba nie je taká zrejmá, rovnako ako po 10 000 slučkách nebola chyba práve teraz.
V tomto momente pridávame zámok na testovanie a je vidieť, že hodnota a je vypočítaná správne, ako sme očakávali.
Kód:
Zhrnutie: volatile nezaručuje bezpečnosť vlákien, ako vidíte v príklade vyššie.
|