[concurrency-interest] question the about the JMM
larryr at saturn.sdsu.edu
Thu Dec 6 13:24:35 EST 2007
> This isn't just about cache coherence. It's also about
> compiler optimization. Consider the following example.
> Initially, p == q, and they are some object with a field x.
> Thread 1:
> r1 = p.x;
> r2 = q.x;
> r3 = p.x;
> Thread 2:
> q.x = 1;
> This means that r1 and r3 can have the value 0 and r2 can
> have the value 1, even though they are all reading from the
> same memory location. No sane cache coherence policy would
> allow this when reading from the same variable (although I
> may be misremembering some), but the JMM does.
I do not see that code using any constructs which bring
cache coherence /or/ happens-before into the picture,
unless x is "volatile", in which case I think ending up
with (r2==1) and (r3==0) should not be valid. What
would be a good example where there is a happens-before
but still r1==r3==0 and r2==1?
More information about the Concurrency-interest