On 02/25/2014 09:38 PM, Brian Burkhalter wrote:
On Feb 20, 2014, at 1:42 AM, Paul Sandoz 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...

Regards, Peter


Thanks,

Brian

Reply via email to