Re: JavaMemoryModel: Total orders

From: Doron Rajwan (doron@rajwan.org)
Date: Wed Dec 10 2003 - 02:15:03 EST


Suppose there is a data-race, when thread1 sets x=1
and thread2 sets x=2. At this point, thread3 can read
x=1 and thread 4 can read x=2, which is fine.

My question is: is the value of x defined?
Specifically:
1. Suppose 1-hour later all 4 threads take a common
mutex. Will x be defined then?
2. Suppose 1-hour later thread5 and thread6 reads x
for the first time. Do they have to see the same
value?

As I understand the spec, both answers are false,
which allows two separate CPUs implementation, when
the main memory in the first contain x=1 and in the
second it contains x=2. Is this true?

thanks,
  Doron.

--- Sylvia Else <sylviae@optushome.com.au> wrote:
> Hi
>
> In the specification, there are several places where
> a total order is
> stated to exist. It is not always clear to me
> whether that is intended to
> be a requirement, or merely a side observation.
>
> In the case of synchronization, the specification
> says
>
> "There is a total order over all lock and unlock
> actions performed by an
> execution of a
> program".
>
> Consider two threads, where each letter represents a
> lock and unlock action
> on a named object's monitor.
>
> Thread 1 Thread 2
> A
> A
> X Y
> B
> B
>
> Does a total order exist here? In particular, what
> is the order of the
> locks on X and Y?
>
> The two threads may be running on separate
> processors, which are separated
> in space. If the lock operations occur sufficiently
> closely in time, then
> there is no defined order for them.
>
> It might seem that an order can be determined by
> looking at the operations
> in main memory, but these are different memory
> locations and could involve
> separate memory hardware, data bus, etc. Indeed,
> these locking operations
> do not necessarily have to go as far as main memory
> anyway. The JVM may be
> scheduling threads in a way such that X is not
> visible to any thread that
> will run on processor 2, and Y is not visible to any
> thread running on
> processor 1. In that case there is no need for the
> main memory to be
> involved in these locks, and to talk about their
> order may be entirely
> meaningless.
>
> A real multiprocessor system that is necessarily
> spread out through space
> can simulate the behaviour of a system that is
> located in one place, and
> thereby provide a total order, but only at the cost
> of limiting its
> performance.
>
> Are the statements about total order in the
> specification really necessary?
>
> Sylvia.
>
> -------------------------------
> JavaMemoryModel mailing list -
http://www.cs.umd.edu/~pugh/java/memoryModel

=====
Doron Rajwan, mailto:doron@rajwan.org

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



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