W językach C# i Java jest przeznaczone specjalnie do wielowątkowości — charakteryzuje zmienną i oznacza, że obiekt, z którym jest ona powiązana, może się zmienić.
C oraz C++ W C i następnie w C++ słowo volatile miało spełniać następujące założenia: dawać dostęp do urządzeń MMIO pozwalać na korzystanie ze zmiennych pomiędzy setjmp i longjmp pozwalać na używanie zmiennych sig_atomic_t w procedurach obsługi przerwań (ang. signal handlers) Operacje na zmiennych ulotnych nie są operacjami atomowymi, ani też nie ustanawiają prawidłowiej relacji (określa w jakiej względnej kolejności wykonywane są instrukcje). Jest to określone w odpowiednich standardach (C, C++, POSIX, WIN32). Zmienne ulotne nie są bezpieczne dla zdecydowanej większości dzisiejszych implementacji programów wielowątkowych, dlatego też użycie volatile jako przenośnego mechanizmu synchronizacji jest odradzane.
Przykład zastosowania w C Poniższy kod inicjuje zmienną foo na 0 i wykonuje pętlę while dopóki foo nie jest równe 255:static int foo;
void var(void) { foo = 0;
while (foo != 255){ /* ... */
}Kompilator optymalizujący zauważy, że żaden inny kod nie może zmienić wartości foo, dlatego założy, że pozostanie ona równa 0. Zamieni wtedy warunek wewnątrz pętli na:static int foo;
void var(void) { foo = 0;
while (true){ /* ...