title: Is a global implicitly volatile in C?
body: <p>My question is very simple. The keyword volatile is mandated when you want to tell the compiler that variable could change outside of the scope where it's used, for example a memory mapped variable in an embedded system or a signal handler variable that can change in response to receiving a signal from the OS. 
  [Removed the part on thread communication as it's just generating confusion, that's not my question].
  [Rephrasing the question to clarify using a comment below]</p>
  
  <p>I think what the OP is asking, <strong>is whether volatile would add further restrictions that are not already imposed by the global nature of the variable (the fact that it's global places certain restrictions on the compiler that are similar to the restrictions that volatile mandates)</strong>. </p>