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
