Fast, Dynamically-Sized Concurrent Hash Table

Conference paper
Part of the Lecture Notes in Computer Science book series (LNCS, volume 9232)


We present a new design and a C++ implementation of a high-performance, cache-efficient hash table suitable for use in implementation of parallel programs in shared memory. Among the main design criteria were the ability to efficiently use variable-length keys, dynamic table resizing to accommodate data sets of unpredictable size and fully concurrent read-write access.

We show that the design is correct with respect to data races, both through a high-level argument, as well as by using a model checker to prove crucial safety properties of the actual implementation. Finally, we provide a number of benchmarks showing the performance characteristics of the C++ implementation, in comparison with both sequential-access and concurrent-access designs.


  1. 1.
    Intel Corporation, Threading Building Blocks (2014–06-01) (2014).
  2. 2.
    Shalev, O., Shavit, N.: Split-ordered lists: lock-free extensible hashtables. J. ACM 53(3), 379–405 (2006). MathSciNetCrossRefGoogle Scholar
  3. 3.
    Laarman, A.W., van de Pol, J.C., Weber, M.: Boosting multi-core reachability performance with shared hash tables. In: Sharygina, N., Bloem, R. (eds.) FMCAD 2010. IEEE Computer Society, Los Alamitos (2010)Google Scholar
  4. 4.
    Purcell, C., Harris, T.: Non-blocking hashtables with open addressing. In: Proceedings of the 19th International Symposium on Distributed Computing, DISC 2005, September 2005, a longer version appears as Technical report UCAM-CL-TR-639.
  5. 5.
    Gao, H., Groote, J.F., Hesselink, W.H.: Lock-free dynamic hash tables with open addressing. Distrib. Comput. 18(1), 21–42 (2005)MATHCrossRefGoogle Scholar
  6. 6.
    Wijs, A., Bošnački, D.: Many-core on-the-fly model checking of safety properties using GPUs. Int. J. Softw. Tools Technol. Transf. 1–17 (2015) (to appear)Google Scholar
  7. 7.
    Jenkins, R.J.: A hash function for hash table lookup (2006).
  8. 8.
    Jenkins, R.J.: SpookyHash: a 128-bit Noncryptographic Hash (2012).
  9. 9.
    Pike, G., Alakuijala, J.: Introducing CityHash (2011)Google Scholar
  10. 10.
    Batagelj, V.: The quadratic hash method when the table size is not a primenumber. Commun. ACM 18(4), 216–217 (1975). MATHCrossRefGoogle Scholar
  11. 11.
    Ročkai, P., Šill, V., Barnat, J.: Techniques for memory-efficient model checking of C and C++ code. In: Software Engineering and Formal Methods (2015, submitted)Google Scholar
  12. 12.
    Fagin, R., Nievergelt, J., Pippenger, N., Strong, H.R.: Extendible hashing—a fast access method for dynamic files. ACM Trans. Database Syst. 4(3), 315–344 (1979)CrossRefGoogle Scholar
  13. 13.
    Barnat, J., et al.: DiVinE 3.0 – anexplicit-state model checker for multithreaded C & C++ programs. In: Sharygina, N., Veith, H. (eds.) CAV 2013. LNCS, vol. 8044, pp. 863–868. Springer, Heidelberg (2013)CrossRefGoogle Scholar

Copyright information

© Springer International Publishing Switzerland 2015

Authors and Affiliations

  1. 1.Faculty of InformaticsMasaryk UniversityBrnoCzech Republic

Personalised recommendations