Re: JavaMemoryModel: Indirect loads and processor consistency

From: Tim Harris (
Date: Tue Dec 03 2002 - 18:38:37 EST

On Mon, 2 Dec 2002 11:26:50 -0500
Doug Lea <> wrote:
> Initially, a == null, x == 0
> Thread 1 Thread 2
> x = 1 r1 = a
> StoreStoreBarrier r2 = *r1
> a = &x
> Can r1 == a && r2 == 0?
> (Where StoreStoreBarrier is no-op on machines not needing them.)
> We'd like the answer to be no.
> We are pretty sure that this is so on some processors:
> * For alpha, section of the Alpha manual includes indirection
> as an honored dependency (within processors).

I'm always reluctant to write anything about the Alpha memory model
when it is late at night (as it is here at the moment), but I don't
think and a StoreStore is sufficient to prevent Thread 2 seeing
Thread 1's second write but not its first.

In this case "r1=a" precedes "r2=*r1" in Thread 2's depends relation,
but the depends relation is only used in defining the dependence
constraint in order to prevent causal loops; it does not in itself
constrain the order of the two reads in the main "BEFORE" relation.
I think Thread 2 needs a memory barrier too.

I'm not sure whether this flexibility is exploited by any existing
Alpha Architecture implementations,

JavaMemoryModel mailing list -

This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:00:41 EDT