<P> In computer programming, particularly in the C, C++, C#, and Java programming languages, the volatile keyword indicates that a value may change between different accesses, even if it does not appear to be modified . This keyword prevents an optimizing compiler from optimizing away subsequent reads or writes and thus incorrectly reusing a stale value or omitting writes . Volatile values primarily arise in hardware access (memory - mapped I / O), where reading from or writing to memory is used to communicate with peripheral devices, and in threading, where a different thread may have modified a value . </P> <P> Despite being a common keyword, the behavior of volatile differs significantly between programming languages, and is easily misunderstood . In C and C++, it is a type qualifier, like const, and is a property of the type . Furthermore, in C and C++ it does not work in most threading scenarios, and that use is discouraged . In Java and C#, it is a property of a variable and indicates that the object to which the variable is bound may mutate, and is specifically intended for threading . In the D programming language, there is a separate keyword shared for the threading usage, but no volatile keyword exists . </P>

What is the purpose of volatile in c