On Tue, Jun 28, 2016 at 5:55 AM, Paul Sandoz <paul.san...@oracle.com> wrote:

> ConcurrentLinkedDeque
> —
>
> linkFirst uses HEAD.compareAndSet, where as linkLast uses
> TAIL.weakCompareAndSetVolatile, can the former use the weak variant too
> since, as commented, failure is OK.
>

Well spotted!

 --- src/main/java/util/concurrent/ConcurrentLinkedDeque.java 17 Jun 2016
13:03:45 -0000 1.73
+++ src/main/java/util/concurrent/ConcurrentLinkedDeque.java 28 Jun 2016
16:59:10 -0000
@@ -300,8 +300,8 @@
                         // Successful CAS is the linearization point
                         // for e to become an element of this deque,
                         // and for newNode to become "live".
-                        if (p != h) // hop two nodes at a time
-                            HEAD.compareAndSet(this, h, newNode);  //
Failure OK.
+                        if (p != h) // hop two nodes at a time; failure is
OK
+                            HEAD.weakCompareAndSetVolatile(this, h,
newNode);
                         return;
                     }
                     // Lost CAS race to another thread; re-read prev

Reply via email to