title: In C/C++, are volatile variables guaranteed to have eventually consistent semantics betwen threads?
body: <p>Is there any guarantee by any commonly followed standard (ISO C or C++, or
  any of the POSIX/SUS specifications) that a variable (perhaps
  marked volatile), not guarded by a mutex, that is being accessed
  by multiple threads will become eventually consistent if it is
  assigned to?</p>
  
  <p>To provide a specific example, consider two threads sharing a
  variable v, with initial value zero.</p>
  
  <p>Thread 1:
    v = 1</p>
  
  <p>Thread 2:
    while(v == 0)
      yield();</p>
  
  <p>Is thread 2 guaranteed to terminate eventually? Or can it
  conceivably spin forever because the cache coherency never kicks
  in and makes the assignment visible in thread 2's cache?</p>
  
  <p>I'm aware the C and C++ standards (before C++0x) do not speak at
  all about threads or concurrency. But I'm curious if the C++0x
  memory model, or pthreads, or anything else, guarantees this.
  (Apparently this does actually work on Windows on 32-bit x86; I'm wondering if it's something that can be relied on generally or if it just happens to work there).</p>