  The lock-free, ordered, linked list is an important, standard example of a
concurrent data structure. An obvious, practical drawback of textbook
implementations is that failed compare-and-swap (CAS) operations lead to
retraversal of the entire list (retries), which is particularly harmful for
such a linear-time data structure. We alleviate this drawback by first
observing that failed CAS operations under some conditions do not require a
full retry, and second by maintaining approximate backwards pointers that are
used to find a closer starting position in the list for operation retry.
Experiments with both a worst-case deterministic benchmark, and a standard,
randomized, mixed-operation throughput benchmark on three shared-memory systems
(Intel Xeon, AMD EPYC, SPARC-T5) show practical improvements ranging from
significant, to dramatic, several orders of magnitude.
