Odkaz na MS:Přihlášení k hypertextovému odkazu je viditelné.
Volatile klíčové slovo znamená, že pole lze upravit tím, že více vláken vykoná současně. Pole deklarovaná jako volatilní nejsou omezena optimalizací kompilátoru (za předpokladu, že k nim přistupuje jedno vlákno). To zajišťuje, že pole je vždy vykreslováno s nejnovější hodnotou.
Volatilní modifikátor se obvykle používá pro pole, ke kterým přistupuje více vláken, ale přístup se neserializuje pomocí příkazu lock.
Volatilní klíčová slova lze aplikovat na následující typy polí:
- Typ citace.
- Typ ukazatele (v nebezpečném kontextu). Všimněte si, že zatímco samotný ukazatel může být proměnlivý, objekt, na který ukazuje, nemůže být proměnlivý. Jinými slovy, "ukazatel na proměnlivý objekt" nelze deklarovat.
- Typy jako sbyte, byte, short, ushort, int, uint, char, float a bool.
- Enum typ s jedním z následujících základních typů: byte, sbyte, short, ushort, int nebo uint.
- Obecné typové parametry, o kterých je známo, že jsou referenčními typy.
- IntPtr a UIntPtr.
Klíčová slova proměnných lze aplikovat pouze na pole třídy nebo struktury.Lokální proměnné nelze deklarovat jako volatilní。
Už žádné nesmysly, napište smyčku na testování:
Otestujme to 10 000krát v smyčce,zjistil, že výstup hodnot a je správný, ale,To nevysvětlujeVolatile je bezpečný pro závityProtože když to otestujete mnohokrát, zjistíte, že se objeví chyby ve výpočtech! Protože existuje šance na správný výsledek a možnost špatného výsledku
Kód:
Otestujme znovu 100 000 smyček a zjistíme, že hodnota a je nesprávná, protože čím menší počet smyček, tím menší je pravděpodobnost chyby, a chyba není tak zřejmá, stejně jako po 10 000 smyčkách chyba nebyla právě teď.
V tuto chvíli přidáváme zámek k testování a je vidět, že hodnota a je správně vypočítána, jak jsme očekávali.
Kód:
Shrnutí: volatile nezaručuje bezpečnost závitu, jak můžete vidět v příkladu výše.
|