JavaMemoryModel: Fairness Guarantees in the Memory Model?

From: Jeremy Manson (jmanson@cs.umd.edu)
Date: Sun Oct 21 2001 - 13:43:17 EDT


I have a question for the list...

Has the issue of fairness in the JMM been thrashed out? There were a
couple of threads on it (here are pointers to their initial messages):

http://www.cs.umd.edu/users/pugh/java/memoryModel/archive/0619.html
http://www.cs.umd.edu/users/pugh/java/memoryModel/archive/0763.html

The main issue seems to be whether read of volatiles or synchronization
blocks can be lifted out of loops, and if so, can this be done a finite
number of times or an infinite one? Here are a couple of examples of what
I mean:

Example 1:

Can this:

while (true)
  synchronized (foo)
    { ... }

Become this:

synchronized (foo)
  while (true)
    { ... }

Example 2:

Can this:

for (i = 0; i < 1 quadrillion; i++)
  synchronized (foo)
    { ... }

Become this:

synchronized (foo)
  for (i = 0; i < 1 quadrillion; i++)
    { ...}

Example 3:

Is this

Initially all variables are 0
Thread 1
  Volatile1 = 1
  while (A == 0) {;}

Thread 2
  while (Volatile1 != 1) {;}
  print "Success"

guaranteed to print "success"?

There are other examples out there... The basic question is what kind of
fairness guarantees need to be included in the spec. I am not asking if
these are good transformations to make, I am just asking whether or not
the JMM should allow them (or even make mention of them).

I have to resolve this issue for my JMM simulator, and I think it is an
important one, so if we have come to a consensus, I would like to know
about it. Thanks!

                                        Jeremy
-------------------------------
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel



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