Pragmatic primitives for non-blocking data structures

Trevor Brown, Faith Ellen, Eric Ruppert
2013 Proceedings of the 2013 ACM symposium on Principles of distributed computing - PODC '13  
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, which we call LLX and SCX. The LLX operation takes a snapshot of one Data-record. An SCX operation by a process p succeeds only if no
more » ... d in a specified set has been changed since p 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 an implementation of these new primitives from single-word compare-and-swap and prove it correct. As a simple example, we show how LLX and SCX can be used to implement a non-blocking multiset data structure in a straightforward way.
doi:10.1145/2484239.2484273 dblp:conf/podc/BrownER13 fatcat:kfi3khic4jg47o7igzdrtlnlzy