Re: reading the JLS (17.4.5)
On 12/21/2011 12:54 AM, Andreas Leitgeb wrote:
Patricia Shanahan<pats@acm.org> wrote:
I think "happens-before" should be thought of as short for "must appear
to happen before". As the JLS says "It should be noted that the presence
of a happens-before relationship between two actions does not
necessarily imply that they have to take place in that order in an
implementation.
The JLS even explicitly spells out, that to an unrelated thread these
synchronized-with actions may even appear out of order. This is, what
confuses me:
T1: hb(A,B) - not necessarily observed so by T2
T1,T2: hb(B,C)
How would T2 "know" about hb(A,C), if it doesn't know hb(A,B) ?
T2 does not necessarily "know", but must see the appropriate results
e.g. from its reads. Making that happen is the Java implementation's
problem. How it happens varies depending on the system.
In a small, simple system, with a sequentially consistent hardware
memory model, it may be as simple as writing out any values that are
being held in registers to the appropriate memory locations.
In other situations, it may be necessary to use special instructions,
such as the SPARC membar, to ensure that prior memory operations are
globally visible.
Patricia