Re: JavaMemoryModel: Code that sleeps and expects to see changes

From: Bill Pugh (pugh@cs.umd.edu)
Date: Mon Oct 25 1999 - 18:33:26 EDT


At 3:09 PM -0700 10/25/99, Keith Randall wrote:
> > An example. Initially, a = b = 0:
> >
> > thread 1 thread 2
> > x = a y = b
> > synchronized (new Object()) {} synchronized (new Object()) {}
> > b = 1 a = 1
> >
> > Under the old model, it would be impossible for this code to result
> > in x = y = 1. But under the new model, since the synchronized blocks
> > in the above code are no-ops, it _is legal_ to get a result of x = y
> > = 1.
>
>Unless I am misinterpreting things, the result x = y = 1 is illegal in
>your new memory model as well.

Oops... You are correct. I'll have to think about this one some more.

>thread 1 thread 2
> a = 1 b = 1
> synchronized (new Object()) {} synchronized (new Object()) {}
> x = b y = a
>
>Any of the four possible values are allowed for the pair (x,y) with
>your new memory model, but the pair (0,0) is not allowed for the old
>memory model (but would be allowed by the old model if the
>synchronized statements were taken away).
>

You are correct.

-------------------------------
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