Request for review: Race conditions in java.nio.charset.Charset

David Holmes - Sun Microsystems David.Holmes at Sun.COM
Thu Oct 8 23:03:26 UTC 2009


Ulf Zibis said the following on 10/08/09 21:58:
> Am 08.10.2009 12:59, David Holmes - Sun Microsystems schrieb:
>> It's a memory model issue. The code is like this:
>>
>>      public String getName() {
>>          if (name == null)
>>             name = getName0();
>>          return name;
>>      }
>>
>> but in theory, accoridng to the JMM experts, it could act as if it 
>> does this:
>>
>>   public String getName() {
>>     String tmp1 = name; // sees null
>>     String tmp2 = name; // sees non-null
>>     if (tmp2 == null)
>>       tmp1 = name = getName0();
>>     return tmp1;
>>   }
>>
>> imagine the temporaries are registers.
> 
> Oops, java programming is not simple as it looks like. Can you give me a 
> link, where I can read more about that subject / JMM?
> David, thanks for your explicit explanation.

The JMM is mostly defined in Chapter 17 of the Java Language 
Specification Third Edition, but it has little pieces scattered in other 
places in the spec (eg treatment of final fields). For more gory details 
than you would want to know check out this site:

http://www.cs.umd.edu/~pugh/java/memoryModel/

For the record I disagree with this particular case as I think returning 
null would violate program order. But the fix is benign so not worth 
arguing over. And the argument is too difficult to make. :)

And as this is getting very OT that's enough of that :)

Cheers,
David



More information about the core-libs-dev mailing list