At 12:46 PM -0500 8/16/02, Sarita Adve wrote:
>
>
>>
>>  Initially, x = y = 0, foobar = either true or false
>>
>>  Thread 1:
>>  if foobar
>>     x = 1
>>     y = 1
>>
>>  Thread 2:
>>  if x = 1
>>     y = 1
>>
>>  Thread 3:
>>  if y = 1
>>     x = 1
>>
>>  OK, if foobar = true, this program has a data race. However,
>>  if foobar=false, this program is correctly synchronized.
>>  However, under Sarita's model
>>  threads 2 and 3 could write to x and y even when foobar=false.
>
>This isn't the case if you consider that the program is also a function
>of the initial conditions, command line, etc. That is, the program with
>initial condition foobar = true is different from the program with
>foobar = false.
No, different initial conditions do not make it a different program. Consider:
Initially, x = y = 0, foo = false and bar = false
Thread 1:
if foo
   x = 1
   y = 1
   bar = true
Thread 2:
if x = 1
   y = 1
Thread 3:
if y = 1
   x = 1
Thread 4:
foo = true
Now, I claim that bar = false, x = 1 and y = 1 should be an illegal result.
Different initial conditions can be (and typically are) the result of 
a prefix of the program producing different results.
-------------------------------
JavaMemoryModel mailing list - http://www.cs.umd.edu/~pugh/java/memoryModel
This archive was generated by hypermail 2b29 : Thu Oct 13 2005 - 07:00:41 EDT