> > The model is that you have a global system that, in each
> > step, executes one operation from one thread. Thus, there
> > is a total order over the execution of all operations.
>
>Why make this assumption? You don't seem to depend on it? It seems like
>this could introduce accidental properties into the semantics that you
>don't really intend.
I had done this initially, because I had wanted to avoid any
mentioning of control and data dependences in the model.
I don't like including them in the model, for a couple of reasons:
* A compiler can never know them exactly, you can only approximate them. Since
different compilers might approximate them differently, does that mean
that different compilers give you different semantics?
* Java has exceptions, and exceptions make control dependences a mess. For
example, consider the following code. Initially, Foo.p and Foo.q are
both null.
Thread 1 Thread 2
Foo.p.x = 0 Foo.q.x = 0
Foo.q = new Point() Foo.p = new Point()
These is really the same as:
initially, Foo.p = Foo.q = 0
Thread 1 Thread 2
if (Foo.p) if (Foo.q)
Foo.q = 1 Foo.p = 1
According to the standard definition of a data race, neither of
these examples has a data race and the assignments to p and q won't
happen.
But even though I don't like including them in the model, I may need to.
Otherwise, you can't reorder a read and a following write. In email
with Sarkar and Gao, they clarified that Location Consistency does
allow reordering of actions within a thread as allowed by control and
data dependences, so it looks like I will have to done something like
that as well.
More soon.
Bill
-------------------------------
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:00:21 EDT