I am actually finessing this right now, so stay tuned. (I am actually not
sure how CnC handles some behavior from write-write data races either, and
have a message pending with B/J.)
Thanks,
Sarita
> -----Original Message-----
> From: lvictor@sunlabs-sr1.East.Sun.COM
> [mailto:lvictor@sunlabs-sr1.East.Sun.COM] On Behalf Of
> victor.luchangco@sun.com
> Sent: Tuesday, July 29, 2003 5:10 PM
> To: sadve@cs.uiuc.edu
> Cc: javamemorymodel@cs.umd.edu
> Subject: Re: JavaMemoryModel: The Intuition Is the Model -
> the full model is in this email!
>
>
>
> More on competing writes:
>
> > > Initially, X == 0
> > >
> > > Thread 1 Thread 2
> > >
> > > X = 1 X = 2
> > > X = 3 r2 = X
> > > r1 = X
> > >
> > > What values may each of r1 and r2 get? Or more to the
> point, what
> > > "special write" replaces "X = 2" so that we cannot get r1 == 1?
> >
> > I don't think there will be an argument that this should
> happen. So the fix:
> > a race write obliterates any values previously deposited by
> its own thread.
> > (Since we have SC semantics, "previous" is well-defined.)
>
> This fix doesn't quite work. Consider, for example, the following:
>
> Initially, X == 0, V == 0 (V is volatile)
>
> Thread 1 Thread 2 Thread 3
>
> X = 1 X = 2 while (V == 0) {}
> V = 1 r2 = X X = 3
> r1 = X
>
> Can we get r1 == 1?
>
> Perhaps we should say that a write obliterates any value written by a
> write that happens before it (i.e., use "previous" in the "happens
> before" sense, rather than using program order or the SC execution).
>
> I'm still not quite sure how to define this notion though, because
> both "r1 = X" and "r2 = X" may see the "X = 2" write, and somehow,
> we need to know that r1 cannot get 1 while r2 can. The notion we
> are looking for may be close to what WW-dag consistency allows
> (i.e., the "allowable writes" definition of Jeremy and Bill).
>
>
> > Of course, in the philosophy of "weaker is better," I can think of
> > one scenario (albeit far-fetched) where [another "strange"
> execution]
> > may actually occur, and it is unclear to me if we do want to fix it.
>
> I don't know whether we should or shouldn't allow these executions.
> Even when I have an opinion on the matter, I haven't thought hard
> enough, nor consulted widely enough, to be confident that I have
> considered all the issues. I'm even ambivalent about the "weaker
> is better" philosophy (though I don't believe that we should make
> the model stronger just to make debugging broken programs easier--
> there are better ways to do that). That's one of the reasons I'm
> glad Jeremy and Bill have looked so long and hard at these issues.
> Someone ought to.
>
> Anyway, let me know if you come up with something that resolves
> the above problem, or if you think the idea of using "allowable
> writes" is sufficient (assuming the details can be worked out).
>
> Victor
>
-------------------------------
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:00:48 EDT