Na większości dzisiejszych platform istnieje system bariery pamięci (od C++11), który powinien być wykorzystywany zamiast mechanizmu volatile, ponieważ pozwala kompilatorowi na lepszą optymalizację i zapewnia poprawne zachowanie podczas operacji wielowątkowych; zarówno C (przed C11), jak i C++ (przed C++11) zakładają modelu wielowątkowego dostępu do pamięci, dlatego zachowanie volatile może nie być deterministyczne pomiędzy kompilatorami/procesorami/systemami operacyjnymi.
C++11 Według standardu C++11 ISO słowo kluczowe volatile jest przeznaczone jedynie dla dostępu sprzętowego i nie należy go używać do komunikacji między wątkami — do tego biblioteka STL przeznaczyła szablony std::atomic<T>.
Java Język Java również posiada słowo kluczowe volatile, lecz ma ona nieco inną specyfikację: We wszystkich wersjach Javy istnieje globalna kolejność odczytów i zapisów do zmiennej z volatile. Dzięki temu każdy wątek mający do niej dostęp odczyta jej obecną wartość przed kontynuacją, zamiast (potencjalnego) wykorzystania zmiennej przechowywanej w pamięci podręcznej. Od Javy 5 zmienne z modyfikatorem volatile zachowują relację . Używanie volatile może być szybsze niż blokowanie, ale może też nie działać w niektórych wypadkach.
Przypisy
Kategoria:Zmienna (informatyka)