1220 |
|
} |
1221 |
|
|
1222 |
|
// Unsafe mechanics. Note that some are (and must be) the same as in FJP |
1223 |
< |
private static final sun.misc.Unsafe U; |
1223 |
> |
private static final sun.misc.Unsafe U = sun.misc.Unsafe.getUnsafe(); |
1224 |
|
private static final int ABASE; |
1225 |
|
private static final int ASHIFT; |
1226 |
|
private static final long QTOP; |
1228 |
|
private static final long QCURRENTSTEAL; |
1229 |
|
static { |
1230 |
|
try { |
1231 |
– |
U = sun.misc.Unsafe.getUnsafe(); |
1232 |
– |
Class<?> wk = WorkQueue.class; |
1233 |
– |
Class<?> ak = ForkJoinTask[].class; |
1231 |
|
QTOP = U.objectFieldOffset |
1232 |
< |
(wk.getDeclaredField("top")); |
1232 |
> |
(WorkQueue.class.getDeclaredField("top")); |
1233 |
|
QLOCK = U.objectFieldOffset |
1234 |
< |
(wk.getDeclaredField("qlock")); |
1234 |
> |
(WorkQueue.class.getDeclaredField("qlock")); |
1235 |
|
QCURRENTSTEAL = U.objectFieldOffset |
1236 |
< |
(wk.getDeclaredField("currentSteal")); |
1237 |
< |
ABASE = U.arrayBaseOffset(ak); |
1238 |
< |
int scale = U.arrayIndexScale(ak); |
1236 |
> |
(WorkQueue.class.getDeclaredField("currentSteal")); |
1237 |
> |
|
1238 |
> |
ABASE = U.arrayBaseOffset(ForkJoinTask[].class); |
1239 |
> |
int scale = U.arrayIndexScale(ForkJoinTask[].class); |
1240 |
|
if ((scale & (scale - 1)) != 0) |
1241 |
|
throw new Error("array index scale not a power of two"); |
1242 |
|
ASHIFT = 31 - Integer.numberOfLeadingZeros(scale); |
3341 |
|
} |
3342 |
|
|
3343 |
|
// Unsafe mechanics |
3344 |
< |
private static final sun.misc.Unsafe U; |
3344 |
> |
private static final sun.misc.Unsafe U = sun.misc.Unsafe.getUnsafe(); |
3345 |
|
private static final int ABASE; |
3346 |
|
private static final int ASHIFT; |
3347 |
|
private static final long CTL; |
3358 |
|
static { |
3359 |
|
// initialize field offsets for CAS etc |
3360 |
|
try { |
3363 |
– |
U = sun.misc.Unsafe.getUnsafe(); |
3364 |
– |
Class<?> k = ForkJoinPool.class; |
3361 |
|
CTL = U.objectFieldOffset |
3362 |
< |
(k.getDeclaredField("ctl")); |
3362 |
> |
(ForkJoinPool.class.getDeclaredField("ctl")); |
3363 |
|
RUNSTATE = U.objectFieldOffset |
3364 |
< |
(k.getDeclaredField("runState")); |
3364 |
> |
(ForkJoinPool.class.getDeclaredField("runState")); |
3365 |
|
STEALCOUNTER = U.objectFieldOffset |
3366 |
< |
(k.getDeclaredField("stealCounter")); |
3367 |
< |
Class<?> tk = Thread.class; |
3366 |
> |
(ForkJoinPool.class.getDeclaredField("stealCounter")); |
3367 |
> |
|
3368 |
|
PARKBLOCKER = U.objectFieldOffset |
3369 |
< |
(tk.getDeclaredField("parkBlocker")); |
3370 |
< |
Class<?> wk = WorkQueue.class; |
3369 |
> |
(Thread.class.getDeclaredField("parkBlocker")); |
3370 |
> |
|
3371 |
|
QTOP = U.objectFieldOffset |
3372 |
< |
(wk.getDeclaredField("top")); |
3372 |
> |
(WorkQueue.class.getDeclaredField("top")); |
3373 |
|
QLOCK = U.objectFieldOffset |
3374 |
< |
(wk.getDeclaredField("qlock")); |
3374 |
> |
(WorkQueue.class.getDeclaredField("qlock")); |
3375 |
|
QSCANSTATE = U.objectFieldOffset |
3376 |
< |
(wk.getDeclaredField("scanState")); |
3376 |
> |
(WorkQueue.class.getDeclaredField("scanState")); |
3377 |
|
QPARKER = U.objectFieldOffset |
3378 |
< |
(wk.getDeclaredField("parker")); |
3378 |
> |
(WorkQueue.class.getDeclaredField("parker")); |
3379 |
|
QCURRENTSTEAL = U.objectFieldOffset |
3380 |
< |
(wk.getDeclaredField("currentSteal")); |
3380 |
> |
(WorkQueue.class.getDeclaredField("currentSteal")); |
3381 |
|
QCURRENTJOIN = U.objectFieldOffset |
3382 |
< |
(wk.getDeclaredField("currentJoin")); |
3383 |
< |
Class<?> ak = ForkJoinTask[].class; |
3384 |
< |
ABASE = U.arrayBaseOffset(ak); |
3385 |
< |
int scale = U.arrayIndexScale(ak); |
3382 |
> |
(WorkQueue.class.getDeclaredField("currentJoin")); |
3383 |
> |
|
3384 |
> |
ABASE = U.arrayBaseOffset(ForkJoinTask[].class); |
3385 |
> |
int scale = U.arrayIndexScale(ForkJoinTask[].class); |
3386 |
|
if ((scale & (scale - 1)) != 0) |
3387 |
|
throw new Error("array index scale not a power of two"); |
3388 |
|
ASHIFT = 31 - Integer.numberOfLeadingZeros(scale); |