issue #82: added doc about DCAS support
authorkhizmax <khizmax@gmail.com>
Mon, 14 Aug 2017 10:31:59 +0000 (13:31 +0300)
committerkhizmax <khizmax@gmail.com>
Mon, 14 Aug 2017 10:31:59 +0000 (13:31 +0300)
cds/details/defs.h
cds/gc/dhp.h
readme.md

index 594c8229c4b504961006775b0eeb52fa4a7f16da..6c737efa2d3dcaf766c00548ec8fe6d2eab308b0 100644 (file)
    - \p boost.thread (thread-loal storage support), boost.system
    - \p google-test
 
+   Some parts of libcds may depend on DCAS (double-width compare-and-swap) atomic primitive if
+   the target architecture supports it. For x86, cmake build script enables -mcx16 compiler flag that
+   switches DCAS support on. You may manually disable DCAS support with the following  command line flags
+   in GCC/clang (for MS VC++ compiler DCAS is not supported):
+   - \p -DCDS_DISABLE_128BIT_ATOMIC - for 64bit build
+   - \p -DCDS_DISABLE_64BIT_ATOMIC - for 32bit build
+   @warning All your projects AND libcds MUST be compiled with the same flags - either with DCAS support or without it.
+
    \par Windows build
 
    Prerequisites: for building <b>cds</b> library and test suite you need:
index 01ff54c64a3a1c26691d40956e6cdd0d81be4325..3752a083b54507fe1422b8a42597d1ea2b630ad2 100644 (file)
@@ -685,6 +685,15 @@ namespace cds { namespace gc {
 
         %DHP is an adaptive variant of classic \p cds::gc::HP, see @ref cds_garbage_collectors_comparison "Compare HP implementation"
 
+        @note: Internally, %DHP depends on free-list implementation. There are
+        DCAS-based free-list \p cds::intrusive::TaggedFreeList and more complicated CAS-based free-list
+        \p cds::intrusive::FreeList. For x86 architecture and GCC/clang, libcds selects appropriate free-list 
+        based on \p -mcx16 compiler flag. You may manually disable DCAS support specifying
+        \p -DCDS_DISABLE_128BIT_ATOMIC for 64bit build or \p -DCDS_DISABLE_64BIT_ATOMIC for 32bit build
+        in compiler command line. All your projects and libcds MUST be compiled with the same flags -
+        either with DCAS support or without it.
+        For MS VC++ compiler DCAS is not supported.
+
         See \ref cds_how_to_use "How to use" section for details how to apply SMR.
     */
     class DHP
index 54c6f15b6e71c596ce456e0dc75d492c7bd379b7..539796d5c6ce790a6fb94426d9cd711d0f9ee57d 100644 (file)
--- a/readme.md
+++ b/readme.md
@@ -46,6 +46,16 @@ Evolution of libcds (Gource visualization by Landon Wilkins): https://www.youtub
    - *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