In thinking about "out of thin air" I realized that all the causality tests
are straight line code. What about loops?
Consider
------------------------
Initially: x=0
Thread 1:
while(true) ; // loop
x = 1;
Thread 2:
r = x;
Behavior in question: r=1
Argument for not allowed:
The assignment to x doesn't occur in any execution in program order so r=1
is out of thin air.
Argument for allowed:
In reality the condition in the loop would be some complicated code and the
compiler might not be able to determine whether the loop terminates.
However it still might recognize that x isn't referenced in the loop and
move the assignment to it ahead of the loop.
------------------------------
Personally I think this should be allowed because I think the compiler
optimization is reasonable and forbidding it would probably require
revision of standard optimization technologies. But I don't think it's
allowed by either MP or SC-.
-------------------------------
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:00:57 EDT