On Feb 26, 2014, at 4:56 AM, Peter Levart wrote:

>>> Not sure the static powerCache field, in the original code, needs to be 
>>> volatile either:
>>> 
>>> 1137     private static volatile BigInteger[][] powerCache;
>> Is there consensus on whether "volatile" is necessary here?
> 
> I think it has to be volatile. The powerCache implementation was added in the 
> following changeset:
> 
>    http://hg.openjdk.java.net/jdk9/dev/jdk/rev/7546
> 
> ...and improved later in the following:
> 
>    http://hg.openjdk.java.net/jdk9/dev/jdk/rev/7586
> 
> It uses a copy-on-write technique to extend the cache with new values when 
> needed. volatile is mandatory here to safely publish the newly constructed 
> array-of-arrays and the newly constructed sub-array to other threads. Without 
> volatile, other threads could see null slots where BigInteger[] and/or 
> BigInteger objects should be...

Thanks for the clarification, Peter.

Brian

Reply via email to