Pragmatic Primitives for Non-blocking Data Structures
Trevor Brown, Faith Ellen, Eric Ruppert

TL;DR
This paper introduces new primitive operations, LLX and SCX, that simplify the implementation of non-blocking data structures in asynchronous shared-memory systems, with a provably correct implementation from compare-and-swap.
Contribution
The paper defines and implements a new set of primitives, LLX and SCX, generalizing load-link and store-conditional, to facilitate non-blocking data structures.
Findings
Provides a correct implementation of LLX and SCX from compare-and-swap.
Demonstrates how to implement a non-blocking multiset using these primitives.
Simplifies the design of non-blocking data structures.
Abstract
We define a new set of primitive operations that greatly simplify the implementation of non-blocking data structures in asynchronous shared-memory systems. The new operations operate on a set of Data-records, each of which contains multiple fields. The operations are generalizations of the well-known load-link (LL) and store-conditional (SC) operations called LLX and SCX. The LLX operation takes a snapshot of one Data-record. An SCX operation by a process succeeds only if no Data-record in a specified set has been changed since last performed an LLX on it. If successful, the SCX atomically updates one specific field of a Data-record in the set and prevents any future changes to some specified subset of those Data-records. We provide a provably correct implementation of these new primitives from single-word compare-and-swap. As a simple example, we show how to implement a…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
Taxonomy
TopicsDistributed systems and fault tolerance · Parallel Computing and Optimization Techniques · Optimization and Search Problems
