Doug Lea wrote:
> Bart nicely expanded on my suggestion to use "synchronizes with"
> instead here. I think we can adopt an equally rigorous usage that
> will still also allow use of "happens before" in main spec, by
> identifying "synchronizes-with" with the second clause of the HB
> definition. As in:
> I happens-before J if:
> 1) I is before J in program order
> 2) I synchronizes-with J
> 3) I happens-before K happens-before J for some K
> I synchronizes-with J if:
> I is an unlock or volatile write, and J is a matching unlock or
> volatile read that comes after I in the total order of
> synchronization actions.
> [Or whatever exact wording JSR133 decides to go with here.]
I find this surprising.
- (Is "allowing the use of happens-before" a valid motivation for anything?)
- With your definition, "synchronizes-with" is much less useful.
Importantly, it cannot be used in documentation for class libraries. A
client of a class library is interested in the actions of starting a
method invocation and returning from a method invocation, and the edges
between those actions; however, there are no synchronizes-with edges
between such actions since these are not synchronization actions
(unlocks, volatile writes, locks, volatile reads). Therefore, you need
program order and you need transitivity.
I suspect that your reply might be: program order and transitivity are
implied. But then, there is no difference between happens-before and
synchronizes-with? Except that in the latter case you require at least
one cross-thread edge (or even exactly one)? What would be the benefit
of such a requirement?
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:01:01 EDT