3 [![GitHub version](https://badge.fury.io/gh/khizmax%2Flibcds.svg)](http://badge.fury.io/gh/khizmax%2Flibcds)
\r
5 The build time for lib and hdr-test is exceed the limit of 50 minutes
\r
6 [![Build Status](https://travis-ci.org/khizmax/libcds.svg?branch=dev)](https://travis-ci.org/khizmax/libcds)
\r
9 The coverity dataset is about 4G of size and about 1G in compressed state so it is a problem to upload it to the coverity server
\r
10 [![Coverity Scan Build Status](https://scan.coverity.com/projects/4445/badge.svg)](https://scan.coverity.com/projects/4445)
\r
13 The Concurrent Data Structures (CDS) library is a collection of concurrent containers
\r
14 that don't require external (manual) synchronization for shared access, and safe memory reclamation (SMR)
\r
15 algorithms like [Hazard Pointer](http://en.wikipedia.org/wiki/Hazard_pointer)
\r
16 and user-space [RCU](http://en.wikipedia.org/wiki/Read-copy-update).
\r
17 CDS is mostly header-only template library. Only SMR core implementation is segregated to .so/.dll file.
\r
19 The library contains the implementations of the following containers:
\r
20 - [lock-free](http://en.wikipedia.org/wiki/Non-blocking_algorithm) stack with optional elimination support
\r
21 - several algo for lock-free queue, including classic Michael & Scott algorithm and its derivatives,
\r
22 the flat combining queue, the segmented queue.
\r
23 - several implementation of unordered set/map - lock-free and fine-grained lock-based
\r
24 - [flat-combining] (http://mcg.cs.tau.ac.il/projects/projects/flat-combining) technique
\r
25 - lock-free [skip-list](http://en.wikipedia.org/wiki/Skip_list)
\r
27 Generally, each container has an intrusive and non-intrusive (STL-like) version belonging to
\r
28 *cds::intrusive* and *cds::container* namespace respectively.
\r
30 Version 2.x of the library is written on C++11 and can be compiled by GCC 4.8+, clang 3.3+, Intel C++ 15+,
\r
31 and MS VC++ 12 (2013) Update 4.
\r
33 Download the latest release from http://sourceforge.net/projects/libcds/files/
\r
35 See online doxygen-generated doc here: http://libcds.sourceforge.net/doc/cds-api/index.html
\r
37 **Pull request requirements**
\r
38 - Pull-request to *master* branch will be unconditionally rejected
\r
39 - *integration* branch is intended for pull-request. Usually, *integration* branch is the same as *master*
\r
40 - *dev* branch is intended for main developing. Usually, it contains unstable code
\r
46 - *TreiberStack*: [1986] R. K. Treiber. Systems programming: Coping with parallelism. Technical Report RJ 5118, IBM Almaden Research Center, April 1986.
\r
47 - Elimination back-off implementation is based on idea from [2004] Danny Hendler, Nir Shavit, Lena Yerushalmi "A Scalable Lock-free Stack Algorithm"
\r
48 - *FCStack* - flat-combining wrapper for *std::stack*
\r
51 - *BasketQueue*: [2007] Moshe Hoffman, Ori Shalev, Nir Shavit "The Baskets Queue"
\r
53 * [1998] Maged Michael, Michael Scott "Simple, fast, and practical non-blocking and blocking concurrent queue algorithms"
\r
54 * [2002] Maged M.Michael "Safe memory reclamation for dynamic lock-free objects using atomic reads and writes"
\r
55 * [2003] Maged M.Michael "Hazard Pointers: Safe memory reclamation for lock-free objects"
\r
56 - *RWQueue*: [1998] Maged Michael, Michael Scott "Simple, fast, and practical non-blocking and blocking concurrent queue algorithms"
\r
57 - *MoirQueue*: [2000] Simon Doherty, Lindsay Groves, Victor Luchangco, Mark Moir "Formal Verification of a practical lock-free queue algorithm"
\r
58 - *OptimisticQueue*: [2008] Edya Ladan-Mozes, Nir Shavit "An Optimistic Approach to Lock-Free FIFO Queues"
\r
59 - *SegmentedQueue*: [2010] Afek, Korland, Yanovsky "Quasi-Linearizability: relaxed consistency for improved concurrency"
\r
60 - *FCQueue* - flat-combining wrapper for *std::queue*
\r
61 - *TsigasCycleQueue*: [2000] Philippas Tsigas, Yi Zhang "A Simple, Fast and Scalable Non-Blocking Concurrent FIFO Queue for Shared Memory Multiprocessor Systems"
\r
62 - *VyukovMPMCCycleQueue* Dmitry Vyukov (see http://www.1024cores.net)
\r
65 - flat-combining deque based on *stl::deque*
\r
68 - *MichaelHashMap*: [2002] Maged Michael "High performance dynamic lock-free hash tables and list-based sets"
\r
69 - *SplitOrderedList*: [2003] Ori Shalev, Nir Shavit "Split-Ordered Lists - Lock-free Resizable Hash Tables"
\r
70 - *StripedMap*, *StripedSet*: [2008] Maurice Herlihy, Nir Shavit "The Art of Multiprocessor Programming"
\r
71 - *CuckooMap*, *CuckooSet*: [2008] Maurice Herlihy, Nir Shavit "The Art of Multiprocessor Programming"
\r
72 - *SkipListMap*, *SkipListSet*: [2008] Maurice Herlihy, Nir Shavit "The Art of Multiprocessor Programming"
\r
74 *Ordered single-linked list*
\r
75 - *LazyList*: [2005] Steve Heller, Maurice Herlihy, Victor Luchangco, Mark Moir, William N. Scherer III, and Nir Shavit "A Lazy Concurrent List-Based Set Algorithm"
\r
76 - *MichaelList*: [2002] Maged Michael "High performance dynamic lock-free hash tables and list-based sets"
\r
79 - *MSPriorityQueue*: [1996] G.Hunt, M.Michael, S. Parthasarathy, M.Scott "An efficient algorithm for concurrent priority queue heaps"
\r
82 - *EllenBinTree*: [2010] F.Ellen, P.Fatourou, E.Ruppert, F.van Breugel "Non-blocking Binary Search Tree"
\r
86 * [2002] Maged M.Michael "Safe memory reclamation for dynamic lock-freeobjects using atomic reads and writes"
\r
87 * [2003] Maged M.Michael "Hazard Pointers: Safe memory reclamation for lock-free objects"
\r
88 * [2004] Andrei Alexandrescy, Maged Michael "Lock-free Data Structures with Hazard Pointers"
\r
90 * [2009] M.Desnoyers "Low-Impact Operating System Tracing" PhD Thesis,
\r
91 Chapter 6 "User-Level Implementations of Read-Copy Update"
\r
92 * [2011] M.Desnoyers, P.McKenney, A.Stern, M.Dagenias, J.Walpole "User-Level
\r
93 Implementations of Read-Copy Update"
\r
96 - [2004] M.Michael "Scalable Lock-free Dynamic Memory Allocation"
\r
98 *Flat Combining* technique
\r
99 - [2010] Hendler, Incze, Shavit and Tzafrir "Flat Combining and the Synchronization-Parallelism Tradeoff"
\r