volatile
Kwalifikator typu w C i C++, który nakazuje kompilatorowi faktycznie wykonać każdy odczyt i zapis zmiennej.
Kompilatory zwykle zakładają, że pamięć zmienia się tylko wtedy, gdy zmienia ją program. Dlatego pętla czekająca na flagę może zostać zoptymalizowana do pętli nieskończonej, a dwa kolejne zapisy pod ten sam adres scalone w jeden. Dla rejestru sprzętowego albo flagi ustawianej w przerwaniu obie optymalizacje są zabójcze. volatile, wprowadzone z ANSI C w 1989 roku, wyłącza je dla tej jednej zmiennej.
I na tym koniec. Nie daje atomowości ani kolejności względem innych zmiennych, a procesor nadal może zmieniać kolejność dostępów. Wątki na wielu rdzeniach potrzebują atomików i barier pamięci; dokumentacja jądra Linuksa ma całą stronę zatytułowaną „Why the volatile type class should not be used”. volatile w Javie to zresztą zupełnie inne zwierzę z prawdziwymi gwarancjami kolejności — to samo słowo, inne obietnice.