CDS C++ library\r
===============\r
+[![GitHub version](https://badge.fury.io/gh/khizmax%2Flibcds.svg)](http://badge.fury.io/gh/khizmax%2Flibcds)\r
+<!---\r
+The build time for lib and hdr-test is exceed the limit of 50 minutes\r
+[![Build Status](https://travis-ci.org/khizmax/libcds.svg?branch=dev)](https://travis-ci.org/khizmax/libcds)\r
+-->\r
+<!---\r
+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
+[![Coverity Scan Build Status](https://scan.coverity.com/projects/4445/badge.svg)](https://scan.coverity.com/projects/4445)\r
+-->\r
\r
-The Concurrent Data Structures (CDS) library is a collection of concurrent data structures \r
-that don't require external (manual) synchronization, and safe memory reclamation (SMR) \r
-algorithms like Hazard Pointer and user-space RCU. CDS is mostly header-only template library. \r
-Only SMR core implementation is segregated to .so (or .dll) file.\r
+The Concurrent Data Structures (CDS) library is a collection of concurrent containers\r
+that don't require external (manual) synchronization for shared access, and safe memory reclamation (SMR) \r
+algorithms like [Hazard Pointer](http://en.wikipedia.org/wiki/Hazard_pointer) \r
+and user-space [RCU](http://en.wikipedia.org/wiki/Read-copy-update). \r
+CDS is mostly header-only template library. Only SMR core implementation is segregated to .so/.dll file.\r
\r
The library contains the implementations of the following containers:\r
- - lock-free stack with optional elimination support\r
- - several algo for lock-free queue, including classic Michael & Scott algorithm and it's derivatives,\r
- flat combining queue, segmented queue.\r
+ - [lock-free](http://en.wikipedia.org/wiki/Non-blocking_algorithm) stack with optional elimination support\r
+ - several algo for lock-free queue, including classic Michael & Scott algorithm and its derivatives,\r
+ the flat combining queue, the segmented queue.\r
- several implementation of unordered set/map - lock-free and fine-grained lock-based\r
- - lock-free skip-list\r
+ - [flat-combining] (http://mcg.cs.tau.ac.il/projects/projects/flat-combining) technique\r
+ - lock-free [skip-list](http://en.wikipedia.org/wiki/Skip_list)\r
\r
Generally, each container has an intrusive and non-intrusive (STL-like) version belonging to \r
-cds::intrusive and cds::container namespace respectively.\r
+*cds::intrusive* and *cds::container* namespace respectively.\r
\r
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
and MS VC++ 12 (2013) Update 4.\r
\r
-Download the latest release from http://sourceforge.net/projects/libcds/files/.\r
+Download the latest release from http://sourceforge.net/projects/libcds/files/\r
+\r
+See online doxygen-generated doc here: http://libcds.sourceforge.net/doc/cds-api/index.html\r
+\r
+**Pull request requirements**\r
+- Pull-request to *master* branch will be unconditionally rejected\r
+- *integration* branch is intended for pull-request. Usually, *integration* branch is the same as *master*\r
+- *dev* branch is intended for main developing. Usually, it contains unstable code\r
+\r
\r
References\r
----------\r
-#### Stack\r
- - TreiberStack: [1986] R. K. Treiber. Systems programming: Coping with parallelism. Technical Report RJ 5118, IBM Almaden Research Center, April 1986.\r
- - Elimination back-off implementation is based on idea from [2004] Danny Hendler, Nir Shavit, Lena Yerushalmi "A Scalable Lock-free Stack Algorithm"\r
+*Stack*\r
+ - *TreiberStack*: [1986] R. K. Treiber. Systems programming: Coping with parallelism. Technical Report RJ 5118, IBM Almaden Research Center, April 1986.\r
+ - Elimination back-off implementation is based on idea from [2004] Danny Hendler, Nir Shavit, Lena Yerushalmi "A Scalable Lock-free Stack Algorithm"\r
+ - *FCStack* - flat-combining wrapper for *std::stack*\r
\r
-#### Queue\r
- - BasketQueue: [2007] Moshe Hoffman, Ori Shalev, Nir Shavit "The Baskets Queue"\r
- - MSQueue:\r
- * [1998] Maged Michael, Michael Scott "Simple, fast, and practical non-blocking and blocking concurrent queue algorithms"\r
- * [2002] Maged M.Michael "Safe memory reclamation for dynamic lock-free objects using atomic reads and writes"\r
- * [2003] Maged M.Michael "Hazard Pointers: Safe memory reclamation for lock-free objects"\r
- - RWQueue: [1998] Maged Michael, Michael Scott "Simple, fast, and practical non-blocking and blocking concurrent queue algorithms"\r
- - MoirQueue: [2000] Simon Doherty, Lindsay Groves, Victor Luchangco, Mark Moir "Formal Verification of a practical lock-free queue algorithm"\r
- - OptimisticQueue: [2008] Edya Ladan-Mozes, Nir Shavit "An Optimistic Approach to Lock-Free FIFO Queues"\r
- - SegmentedQueue: [2010] Afek, Korland, Yanovsky "Quasi-Linearizability: relaxed consistency for improved concurrency"\r
- - TsigasCycleQueue: [2000] Philippas Tsigas, Yi Zhang "A Simple, Fast and Scalable Non-Blocking Concurrent FIFO Queue for Shared Memory Multiprocessor Systems"\r
- - VyukovMPMCCycleQueue Dmitry Vyukov (see http://www.1024cores.net)\r
+*Queue*\r
+ - *BasketQueue*: [2007] Moshe Hoffman, Ori Shalev, Nir Shavit "The Baskets Queue"\r
+ - *MSQueue*:\r
+ * [1998] Maged Michael, Michael Scott "Simple, fast, and practical non-blocking and blocking concurrent queue algorithms"\r
+ * [2002] Maged M.Michael "Safe memory reclamation for dynamic lock-free objects using atomic reads and writes"\r
+ * [2003] Maged M.Michael "Hazard Pointers: Safe memory reclamation for lock-free objects"\r
+ - *RWQueue*: [1998] Maged Michael, Michael Scott "Simple, fast, and practical non-blocking and blocking concurrent queue algorithms"\r
+ - *MoirQueue*: [2000] Simon Doherty, Lindsay Groves, Victor Luchangco, Mark Moir "Formal Verification of a practical lock-free queue algorithm"\r
+ - *OptimisticQueue*: [2008] Edya Ladan-Mozes, Nir Shavit "An Optimistic Approach to Lock-Free FIFO Queues"\r
+ - *SegmentedQueue*: [2010] Afek, Korland, Yanovsky "Quasi-Linearizability: relaxed consistency for improved concurrency"\r
+ - *FCQueue* - flat-combining wrapper for *std::queue*\r
+ - *TsigasCycleQueue*: [2000] Philippas Tsigas, Yi Zhang "A Simple, Fast and Scalable Non-Blocking Concurrent FIFO Queue for Shared Memory Multiprocessor Systems"\r
+ - *VyukovMPMCCycleQueue* Dmitry Vyukov (see http://www.1024cores.net)\r
\r
-#### Deque\r
- - MichaelDeque: [2003] Maged Michael "CAS-based Lock-free Algorithm for Shared Deque"\r
+*Deque*\r
+ - flat-combining deque based on *stl::deque*\r
\r
-#### Map, set\r
- - MichaelHashMap: [2002] Maged Michael "High performance dynamic lock-free hash tables and list-based sets"\r
- - SplitOrderedList: [2003] Ori Shalev, Nir Shavit "Split-Ordered Lists - Lock-free Resizable Hash Tables"\r
- - StripedMap, StripedSet: [2008] Maurice Herlihy, Nir Shavit "The Art of Multiprocessor Programming"\r
- - CuckooMap, CuckooSet: [2008] Maurice Herlihy, Nir Shavit "The Art of Multiprocessor Programming"\r
- - SkipListMap, SkipListSet: [2008] Maurice Herlihy, Nir Shavit "The Art of Multiprocessor Programming"\r
+*Map, set*\r
+ - *MichaelHashMap*: [2002] Maged Michael "High performance dynamic lock-free hash tables and list-based sets"\r
+ - *SplitOrderedList*: [2003] Ori Shalev, Nir Shavit "Split-Ordered Lists - Lock-free Resizable Hash Tables"\r
+ - *StripedMap*, *StripedSet*: [2008] Maurice Herlihy, Nir Shavit "The Art of Multiprocessor Programming"\r
+ - *CuckooMap*, *CuckooSet*: [2008] Maurice Herlihy, Nir Shavit "The Art of Multiprocessor Programming"\r
+ - *SkipListMap*, *SkipListSet*: [2008] Maurice Herlihy, Nir Shavit "The Art of Multiprocessor Programming"\r
\r
-#### Ordered single-linked list\r
- - 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
- - MichaelList: [2002] Maged Michael "High performance dynamic lock-free hash tables and list-based sets"\r
+*Ordered single-linked list*\r
+ - *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
+ - *MichaelList*: [2002] Maged Michael "High performance dynamic lock-free hash tables and list-based sets"\r
\r
-#### Priority queue\r
- - MSPriorityQueue: [1996] G.Hunt, M.Michael, S. Parthasarathy, M.Scott "An efficient algorithm for concurrent priority queue heaps"\r
+*Priority queue*\r
+ - *MSPriorityQueue*: [1996] G.Hunt, M.Michael, S. Parthasarathy, M.Scott "An efficient algorithm for concurrent priority queue heaps"\r
\r
-#### Tree\r
- - EllenBinTree: [2010] F.Ellen, P.Fatourou, E.Ruppert, F.van Breugel "Non-blocking Binary Search Tree"\r
+*Tree*\r
+ - *EllenBinTree*: [2010] F.Ellen, P.Fatourou, E.Ruppert, F.van Breugel "Non-blocking Binary Search Tree"\r
\r
-#### Garbage collection\r
- - Hazard Pointers\r
- * [2002] Maged M.Michael "Safe memory reclamation for dynamic lock-freeobjects using atomic reads and writes"\r
- * [2003] Maged M.Michael "Hazard Pointers: Safe memory reclamation for lock-free objects"\r
- * [2004] Andrei Alexandrescy, Maged Michael "Lock-free Data Structures with Hazard Pointers"\r
- - User-space RCU\r
- * [2009] M.Desnoyers "Low-Impact Operating System Tracing" PhD Thesis,\r
- Chapter 6 "User-Level Implementations of Read-Copy Update"\r
- * [2011] M.Desnoyers, P.McKenney, A.Stern, M.Dagenias, J.Walpole "User-Level\r
- Implementations of Read-Copy Update"\r
+*SMR*\r
+ - Hazard Pointers\r
+ * [2002] Maged M.Michael "Safe memory reclamation for dynamic lock-freeobjects using atomic reads and writes"\r
+ * [2003] Maged M.Michael "Hazard Pointers: Safe memory reclamation for lock-free objects"\r
+ * [2004] Andrei Alexandrescy, Maged Michael "Lock-free Data Structures with Hazard Pointers"\r
+ - User-space RCU\r
+ * [2009] M.Desnoyers "Low-Impact Operating System Tracing" PhD Thesis,\r
+ Chapter 6 "User-Level Implementations of Read-Copy Update"\r
+ * [2011] M.Desnoyers, P.McKenney, A.Stern, M.Dagenias, J.Walpole "User-Level\r
+ Implementations of Read-Copy Update"\r
\r
-#### Memory allocation \r
- - [2004] M.Michael "Scalable Lock-free Dynamic Memory Allocation"\r
+*Memory allocation*\r
+ - [2004] M.Michael "Scalable Lock-free Dynamic Memory Allocation"\r
\r
-#### Flat Combining technique\r
- - [2010] Hendler, Incze, Shavit and Tzafrir "Flat Combining and the Synchronization-Parallelism Tradeoff"\r
+*Flat Combining* technique\r
+ - [2010] Hendler, Incze, Shavit and Tzafrir "Flat Combining and the Synchronization-Parallelism Tradeoff"\r