Re: reading the JLS (17.4.5)
On 12/20/2011 10:50 AM, markspace wrote:
....
Patricia had some thoughts on reordering by hardware, but that involved
synchronization and memory barriers, and I don't recall seeing those
discussed in the small JLS section in question. I think this JLS section
applies more generally than a read or write getting moved out of a
synchronization block. I think it applies absolutely everywhere.
I just wanted to construct one specific case, and picked a fairly
arbitrary combination of operations and events. Producing the sort of
effect I was aiming for does require a happens-before relationship
between two actions in different threads.
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. If the reordering produces results consistent with a
legal execution, it is not illegal."
Prohibiting a read R from seeing the result of a write W if R "must
appear to happen before" W, but may in fact have happened after W, is
quite reasonable.
Patricia