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
setjmp
andlongjmp
- 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