JavaMemoryModel: Question regarding causality

From: Frank Peters (
Date: Sat Feb 05 2005 - 04:39:54 EST

This is a "layman" question regarding the definition of causality in the
August 24th version of the JSR 133 spec.

I haven't got a problem with the formalism, and I'm happy with the informal
ideas of early committing of writes which don't rely on data races.

BUT, I'm missing something (probably obvious) in the link between the formal
and informal.

The specific example I'm thinking of is the one of Figure 6 (p15).

While I can see that, informally, we don't want to commit the writes of x or
y early, I don't see how that is enforced by the rules for causality.

Specifically, I can't see why it's illegal for me to put, say, the thread 2
write (x = 1) in my first round of commits (C1), then put the corresponding
read (r1 = x) in C2, where it sees 0 and then sees the value 1 in E3.

In other words, how do the rules differentiate between the case where the
conditionals don't exist (and where I presuame I would be allowed to commit
the writes early), and this case, where the conditionals do exist.

I'm sure it's glaringly obvious, so I hope it's no great trouble for someone
to enlighten me!

Frank Peters

Express yourself with cool new emoticons

JavaMemoryModel mailing list -

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