Chciałbym dodać, że nietrwałość jest również bardzo przydatna w przypadku aplikacji wielowątkowych, tj. Masz swój główny wątek (w którym żyje main ()) i tworzysz wątek roboczy, który będzie się obracał, gdy zmienna „app_running” jest prawdziwa. main () kontroluje, czy „app_running” jest prawdą czy fałszem, więc jeśli nie dodasz atrybutu volatile do deklaracji „app_running”, jeśli kompilator optymalizuje dostęp do „app_running” w kodzie uruchamianym przez wątek dodatkowy, main ( ) może zmienić „app_running” na false, ale wątek pomocniczy będzie nadal działał, ponieważ wartość została zapisana w pamięci podręcznej. Widziałem to samo zachowanie przy użyciu gcc w systemie Linux i VisualC ++. Atrybut „volatile” umieszczony w deklaracji „app_running” rozwiązał problem. Więc,
volatile
obiekty mogą być również zmieniane przez procesy w ogóle nie angażujące procesora. Na przykład rejestr odebrany przez bajty w urządzeniu peryferyjnym komunikacyjnym może się zwiększać po odebraniu bajtu (a to może nawet wywołać przerwanie). Innym przykładem jest rejestr flagi oczekujących przerwań w urządzeniu peryferyjnym.