Removed MSVC 14 (VC 2015) projects
[libcds.git] / readme.md
index e1c5424193e9b5aa43d78435f1bc8943ac3a47ee..fa9237cfc4bd42d490434dae09deed1e9d739c4f 100644 (file)
--- a/readme.md
+++ b/readme.md
@@ -2,11 +2,8 @@ CDS C++ library
 ===============\r
 [![GitHub version](https://badge.fury.io/gh/khizmax%2Flibcds.svg)](http://badge.fury.io/gh/khizmax%2Flibcds)\r
 [![License](https://img.shields.io/:license-bsd-blue.svg?style=round-square)](https://github.com/khizmax/libcds/blob/master/LICENSE)\r
-\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
 <!---\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
@@ -15,7 +12,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\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
+and user-space [RCU](http://en.wikipedia.org/wiki/Read-copy-update) that is used as an epoch-based SMR.\r
+\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
@@ -23,19 +21,38 @@ The library contains the implementations of the following containers:
   - 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
-  - [flat-combining] (http://mcg.cs.tau.ac.il/projects/projects/flat-combining) technique\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
+  - lock-free FeldmanHashMap/Set [Multi-Level Array Hash](http://samos-conference.com/Resources_Samos_Websites/Proceedings_Repository_SAMOS/2013/Files/2013-IC-20.pdf)\r
+    with thread-safe bidirectional iterator support\r
+  - Bronson's et al algorithm for fine-grained lock-based AVL tree\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
+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+, \r
+and MS VC++ 12 (2013) Update 4 and above\r
 \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
+Evolution of libcds (Gource visualization by Landon Wilkins): https://www.youtube.com/watch?v=FHaJvVdmJ0w\r
+\r
+**How to build**\r
+   - *nix: [use CMake](build/cmake/readme.md)\r
+   - Windows: use MS Visual C++ 2015 project\r
+\r
+Some parts of libcds may depend on DCAS (double-width compare-and-swap) atomic primitive if\r
+the target architecture supports it. For x86, cmake build script enables `-mcx16` compiler flag that\r
+switches DCAS support on. You may manually disable DCAS support with the following command line flags\r
+in GCC/clang (for MS VC++ compiler DCAS is not supported):\r
+  - `-DCDS_DISABLE_128BIT_ATOMIC` - for 64bit build\r
+  - `-DCDS_DISABLE_64BIT_ATOMIC` - for 32bit build\r
+\r
+**All your projects AND libcds MUST be compiled with the same flags - either with DCAS support or without it.**\r
+   \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
@@ -70,8 +87,6 @@ References
   - *SegmentedQueue*: [2010] Afek, Korland, Yanovsky "Quasi-Linearizability: relaxed consistency for improved concurrency"\r
         [pdf](http://mcg.cs.tau.ac.il/papers/opodis2010-quasi.pdf)\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
-        [pdf](http://www.cse.chalmers.se/~tsigas/papers/latest-spaa01.pdf)\r
   - *VyukovMPMCCycleQueue* Dmitry Vyukov (see http://www.1024cores.net)\r
 \r
 *Deque*\r
@@ -85,6 +100,9 @@ References
   - *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
+  - *FeldmanHashMap*, *FeldmanHashSet*: [2013] Steven Feldman, Pierre LaBorde, Damian Dechev "Concurrent Multi-level Arrays:\r
+        Wait-free Extensible Hash Maps". Supports **thread-safe bidirectional iterators**\r
+        [pdf](http://samos-conference.com/Resources_Samos_Websites/Proceedings_Repository_SAMOS/2013/Files/2013-IC-20.pdf)\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
@@ -119,10 +137,6 @@ References
              Implementations of Read-Copy Update"\r
              [pdf](http://www.dorsal.polymtl.ca/sites/www.dorsal.polymtl.ca/files/publications/desnoyers-ieee-urcu-submitted.pdf)\r
 \r
-*Memory allocation*\r
-  - [2004] M.Michael "Scalable Lock-free Dynamic Memory Allocation"\r
-            [pdf](http://www.research.ibm.com/people/m/michael/pldi-2004.pdf)\r
-\r
 *Flat Combining* technique\r
   - [2010] Hendler, Incze, Shavit and Tzafrir "Flat Combining and the Synchronization-Parallelism Tradeoff"\r
             [pdf](http://www.cs.bgu.ac.il/~hendlerd/papers/flat-combining.pdf)\r