In C and C++
In C, and consequently C++, the volatile keyword was intended to
- allow access to memory mapped devices
- allow uses of variables between
setjmpandlongjmp - allow uses of sig_atomic_t variables in signal handlers.
Operations on volatile variables are not atomic, nor do they establish a proper happens-before relationship for threading. This is according to the relevant standards (C, C++, POSIX, WIN32), and this is the matter of fact for the vast majority of current implementations. Thus, the usage of volatile keyword as a portable synchronization mechanism is discouraged by many C/C++ groups.
Read more about this topic: Volatile Variable