Fast, Dynamically-Sized Concurrent Hash Table

  • J. Barnat
  • P. Ročkai
  • V. Štill
  • J. Weiser
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.


Model Checker Hash Table Cache Line Data Race Memory Overhead 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


  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)zbMATHCrossRefGoogle 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). zbMATHCrossRefGoogle 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