Link do pani:Logowanie do linku jest widoczne.
Słowo kluczowe zmienne wskazuje, że pole może być modyfikowane przez wykonanie wielu wątków jednocześnie. Pola zadeklarowane jako ulotne nie są ograniczone przez optymalizację kompilatora (zakładając, że są dostępne przez jeden wątek). Zapewnia to, że pole jest zawsze wyświetlane z najnowszą wartością.
Modyfikator ulotności jest zazwyczaj używany dla pól dostępnych przez wiele wątków, ale nie serializują dostępu za pomocą instrukcji blokady.
Zmienne słowa kluczowe można stosować do następujących typów pól:
- Typ cytowania.
- Typ wskaźnika (w niebezpiecznym kontekście). Należy zauważyć, że choć sam wskaźnik może być zmienny, obiekt, na który wskazuje, nie może być zmienny. Innymi słowy, "wskaźnik do obiektu zmiennego" nie może być zadeklarowany.
- Typy takie jak sbyte, byte, short, ushort, int, uint, char, float i bool.
- Typ enum o jednym z następujących typów bazowych: bajt, sbyte, short, ushort, int lub uint.
- Ogólne parametry typu, które są znane jako typy referencyjne.
- IntPtr i UIntPtr.
Zmienne słowa kluczowe mogą być stosowane tylko do pól klasy lub struktury.Zmienne lokalne nie mogą być zadeklarowane jako zmienne ulotne。
Koniec z bzdurami, napisz pętlę, żeby to przetestować:
Sprawdźmy to 10 000 razy w pętli,stwierdził, że wyjście wartości a jest poprawne, ale,To nie wyjaśniaVolatile jest bezpieczny dla niciBo jeśli testujesz to wielokrotnie, zauważysz, że pojawią się błędy obliczeniowe! Ponieważ istnieje szansa na poprawny wynik i ryzyko błędnego wyniku
Kod:
Przetestujmy ponownie 100 000 pętli i możemy okazać, że wartość a jest błędna, ponieważ im mniejsza liczba pętli, tym mniejsze ryzyko błędu, a błąd nie jest tak oczywisty, tak jak nie było błędu po 10 000 pętli przed chwilą.
W tym momencie dodajemy blokadę do testu i widać, że wartość a została obliczona poprawnie, zgodnie z oczekiwaniami.
Kod:
Podsumowanie: lotny nie gwarantuje bezpieczeństwa gwintu, jak widać na powyższym przykładzie.
|