X-Git-Url: http://plrg.eecs.uci.edu/git/?p=libcds.git;a=blobdiff_plain;f=readme.md;h=54c6f15b6e71c596ce456e0dc75d492c7bd379b7;hp=e1c5424193e9b5aa43d78435f1bc8943ac3a47ee;hb=37035f1a51ee2412bf2bef2d54a70c7f80ca89b6;hpb=351fa51d239f4f4a7b1e02d0a556ebdb698d883a diff --git a/readme.md b/readme.md index e1c54241..54c6f15b 100644 --- a/readme.md +++ b/readme.md @@ -15,7 +15,8 @@ The coverity dataset is about 4G of size and about 1G in compressed state so it The Concurrent Data Structures (CDS) library is a collection of concurrent containers that don't require external (manual) synchronization for shared access, and safe memory reclamation (SMR) algorithms like [Hazard Pointer](http://en.wikipedia.org/wiki/Hazard_pointer) -and user-space [RCU](http://en.wikipedia.org/wiki/Read-copy-update). +and user-space [RCU](http://en.wikipedia.org/wiki/Read-copy-update) that is used as an epoch-based SMR. + CDS is mostly header-only template library. Only SMR core implementation is segregated to .so/.dll file. The library contains the implementations of the following containers: @@ -25,17 +26,26 @@ The library contains the implementations of the following containers: - several implementation of unordered set/map - lock-free and fine-grained lock-based - [flat-combining] (http://mcg.cs.tau.ac.il/projects/projects/flat-combining) technique - lock-free [skip-list](http://en.wikipedia.org/wiki/Skip_list) + - lock-free FeldmanHashMap/Set [Multi-Level Array Hash](http://samos-conference.com/Resources_Samos_Websites/Proceedings_Repository_SAMOS/2013/Files/2013-IC-20.pdf) + with thread-safe bidirectional iterator support + - Bronson's et al algorithm for fine-grained lock-based AVL tree Generally, each container has an intrusive and non-intrusive (STL-like) version belonging to -*cds::intrusive* and *cds::container* namespace respectively. +*cds::intrusive* and *cds::container* namespace respectively. -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+, -and MS VC++ 12 (2013) Update 4. +Version 2.x of the library is written on C++11 and can be compiled by GCC 4.8+, clang 3.6+, Intel C++ 15+, +and MS VC++ 12 (2013) Update 4 and above Download the latest release from http://sourceforge.net/projects/libcds/files/ See online doxygen-generated doc here: http://libcds.sourceforge.net/doc/cds-api/index.html +Evolution of libcds (Gource visualization by Landon Wilkins): https://www.youtube.com/watch?v=FHaJvVdmJ0w + +**How to build** + - *nix: [use CMake](build/cmake/readme.md) + - Windows: use MS Visual C++ 2015 project + **Pull request requirements** - Pull-request to *master* branch will be unconditionally rejected - *integration* branch is intended for pull-request. Usually, *integration* branch is the same as *master* @@ -70,8 +80,6 @@ References - *SegmentedQueue*: [2010] Afek, Korland, Yanovsky "Quasi-Linearizability: relaxed consistency for improved concurrency" [pdf](http://mcg.cs.tau.ac.il/papers/opodis2010-quasi.pdf) - *FCQueue* - flat-combining wrapper for *std::queue* - - *TsigasCycleQueue*: [2000] Philippas Tsigas, Yi Zhang "A Simple, Fast and Scalable Non-Blocking Concurrent FIFO Queue for Shared Memory Multiprocessor Systems" - [pdf](http://www.cse.chalmers.se/~tsigas/papers/latest-spaa01.pdf) - *VyukovMPMCCycleQueue* Dmitry Vyukov (see http://www.1024cores.net) *Deque* @@ -85,6 +93,9 @@ References - *StripedMap*, *StripedSet*: [2008] Maurice Herlihy, Nir Shavit "The Art of Multiprocessor Programming" - *CuckooMap*, *CuckooSet*: [2008] Maurice Herlihy, Nir Shavit "The Art of Multiprocessor Programming" - *SkipListMap*, *SkipListSet*: [2008] Maurice Herlihy, Nir Shavit "The Art of Multiprocessor Programming" + - *FeldmanHashMap*, *FeldmanHashSet*: [2013] Steven Feldman, Pierre LaBorde, Damian Dechev "Concurrent Multi-level Arrays: + Wait-free Extensible Hash Maps". Supports **thread-safe bidirectional iterators** + [pdf](http://samos-conference.com/Resources_Samos_Websites/Proceedings_Repository_SAMOS/2013/Files/2013-IC-20.pdf) *Ordered single-linked list* - *LazyList*: [2005] Steve Heller, Maurice Herlihy, Victor Luchangco, Mark Moir, William N. Scherer III, and Nir Shavit "A Lazy Concurrent List-Based Set Algorithm" @@ -119,10 +130,6 @@ References Implementations of Read-Copy Update" [pdf](http://www.dorsal.polymtl.ca/sites/www.dorsal.polymtl.ca/files/publications/desnoyers-ieee-urcu-submitted.pdf) -*Memory allocation* - - [2004] M.Michael "Scalable Lock-free Dynamic Memory Allocation" - [pdf](http://www.research.ibm.com/people/m/michael/pldi-2004.pdf) - *Flat Combining* technique - [2010] Hendler, Incze, Shavit and Tzafrir "Flat Combining and the Synchronization-Parallelism Tradeoff" [pdf](http://www.cs.bgu.ac.il/~hendlerd/papers/flat-combining.pdf)