Split-ordered lists: lock-free extensible hash tables

We present the first lock-free implementation of an extensible hash table running on current architectures. It provides concurrent insert, delete, and search operations with an expected O(1) cost. It consists of very simple code, easily implementable using only load, store, and compare-and-swap operations. The new mathematical structure at the core of our algorithm is recursive split-ordering, a way of ordering elements in a linked list so that they can be repeatedly "split" using a single compare-and-swap operation. Empirical tests conducted on a large shared memory multiprocessor show that even in non-multiprogrammed environments, the new algorithm significantly outperforms the most efficient known lock-based algorithm at all concurrency levels, exhibiting up to four times higher throughput at peak load. The incremental nature of our algorithm makes it well suited for real-time applications, as it offers predictable performance without unexpected breaks for resizing.

[1]  John D. Valois Lock-free linked lists using compare-and-swap , 1995, PODC '95.

[2]  Maurice Herlihy,et al.  Software transactional memory for dynamic-sized data structures , 2003, PODC '03.

[3]  David R. Cheriton,et al.  Non-blocking synchronization and system design , 1999 .

[4]  Hui Gao,et al.  Almost wait-free resizable hashtables , 2004, 18th International Parallel and Distributed Processing Symposium, 2004. Proceedings..

[5]  Mark Moir,et al.  Nonblocking k-compare-single-swap , 2003, SPAA '03.

[6]  L ScottMichael,et al.  Nonblocking Algorithms and Preemption-Safe Locking on Multiprogrammed Shared Memory Multiprocessors , 1998 .

[7]  Mark Moir Practical implementations of non-blocking synchronization primitives , 1997, PODC '97.

[8]  V. Rich Personal communication , 1989, Nature.

[9]  Witold Litwin,et al.  Linear Hashing: A new Algorithm for Files and Tables Addressing , 1980, ICOD.

[10]  Ronald L. Rivest,et al.  Introduction to Algorithms, Second Edition , 2001 .

[11]  Ronald L. Rivest,et al.  Introduction to Algorithms , 1990 .

[12]  Wei-Pang Yang,et al.  Concurrent Operations in Extendible Hashing , 1986, VLDB.

[13]  Michael L. Scott,et al.  Scalable reader-writer synchronization for shared-memory multiprocessors , 1991, PPOPP '91.

[14]  Alexander A. Shvartsman,et al.  Fault-Tolerant Parallel Computation , 1997 .

[15]  Carla Schlatter Ellis,et al.  Extendible hashing for concurrent operations and distributed data , 1983, PODS '83.

[16]  Maged M. Michael Safe memory reclamation for dynamic lock-free objects using atomic reads and writes , 2002, PODC '02.

[17]  Maged M. Michael,et al.  Nonblocking Algorithms and Preemption-Safe Locking on Multiprogrammed Shared Memory Multiprocessors , 1998, J. Parallel Distributed Comput..

[18]  Nir Shavit,et al.  DCAS-based concurrent deques , 2000, SPAA '00.

[19]  Maged M. Michael,et al.  High performance dynamic lock-free hash tables and list-based sets , 2002, SPAA '02.

[20]  Maurice Herlihy,et al.  The Repeat Offender Problem: A Mechanism for Supporting Dynamic-Sized, Lock-Free Data Structures , 2002, DISC.

[21]  Carla Schlatter Ellis,et al.  Concurrency in linear hashing , 1987, TODS.

[22]  Jan Friso Groote,et al.  An algorithm for the asynchronous Write-All problem based on process collision , 2001, Distributed Computing.

[23]  Timothy L. Harris,et al.  A Pragmatic Implementation of Non-blocking Linked-Lists , 2001, DISC.

[24]  Maurice Herlihy,et al.  Linearizability: a correctness condition for concurrent objects , 1990, TOPL.

[25]  Nir Shavit,et al.  Software transactional memory , 1995, PODC '95.

[26]  Michael B. Greenwald,et al.  Two-handed emulation: how to build non-blocking implementations of complex data-structures using DCAS , 2002, PODC '02.

[27]  Hui Gao,et al.  Efficient almost wait-free parallel accessible dynamic hashtables , 2003, ArXiv.

[28]  Clifford Stein,et al.  Introduction to Algorithms, 2nd edition. , 2001 .