336 |
|
int j = (i << ASHIFT) + ((1 << ASHIFT) - 1); |
337 |
|
if (j < 0 || j >= alen) |
338 |
|
j = alen - 1; |
339 |
< |
Node q = (Node)AA.getVolatile(a, j); |
339 |
> |
Node q = (Node)AA.getAcquire(a, j); |
340 |
|
if (q != null && AA.compareAndSet(a, j, q, null)) { |
341 |
|
Object v = q.item; // release |
342 |
|
q.match = item; |
366 |
|
(--spins & ((SPINS >>> 1) - 1)) == 0) |
367 |
|
Thread.yield(); // two yields per wait |
368 |
|
} |
369 |
< |
else if (AA.getVolatile(a, j) != p) |
369 |
> |
else if (AA.getAcquire(a, j) != p) |
370 |
|
spins = SPINS; // releaser hasn't set match yet |
371 |
|
else if (!t.isInterrupted() && m == 0 && |
372 |
|
(!timed || |
373 |
|
(ns = end - System.nanoTime()) > 0L)) { |
374 |
|
p.parked = t; // minimize window |
375 |
< |
if (AA.getVolatile(a, j) == p) { |
375 |
> |
if (AA.getAcquire(a, j) == p) { |
376 |
|
if (ns == 0L) |
377 |
|
LockSupport.park(this); |
378 |
|
else |
380 |
|
} |
381 |
|
p.parked = null; |
382 |
|
} |
383 |
< |
else if (AA.getVolatile(a, j) == p && |
383 |
> |
else if (AA.getAcquire(a, j) == p && |
384 |
|
AA.compareAndSet(a, j, p, null)) { |
385 |
|
if (m != 0) // try to shrink |
386 |
|
BOUND.compareAndSet(this, b, b + SEQ - 1); |