The discussion above is true in a broad, definitive sense. In the micro-controller world and with PC I/O, the most common use of Volatile in embedded programming is with a "write only" output port register. Without the volatile designation, the compiler might throw away any use of the variable since it is never read and seemingly not needed. So, in practice, it is a common way of specifying to a compiler that the variable is really a bit of hardware and optimizations should not be applied to it. If you look at the header files (.h) which define I/O ports for many micro-controllers, the volatile qualifier is used throughout. Back in the old days, this was about the only use of the qualifier when using C. With threads and so forth, the use has expanded. Anyway, I post this to specifically highlight the use with programming I/O.