All Versions
Latest Version
Avg Release Cycle
218 days
Latest Release
1888 days ago

Changelog History

  • v2.3.3 Changes

    December 31, 2018

    ๐Ÿš€ Maintenance release

    • Minimum CMake version is 3.0.2
    • ๐Ÿ”„ Changed software license from BSD to Boost
    • โœ‚ Removed '#pragma lib' for Windows build
    • ๐Ÿ›  Bugfix and minor improvements
  • v2.3.2 Changes

    December 31, 2017

    ๐Ÿš€ Maintenance release

    • โž• Added: apply( Func f ) method to containers based on flat combining.
      This method allows to execute any function over underlying container
      in exclusive mode.
    • โœ‚ Removed: -fno-strict-aliasing requirement
    • ๐Ÿ›  Fixed: a serious bug in WeakRingBuffer::front()
    • ๐Ÿ›  Fixed: memcpy bug in CuckooHash with store_hash feature
  • v2.3.1 Changes

    September 01, 2017

    ๐Ÿš€ Maintenance release

    • issue #81: bug in gc::DHP when extending thread's retired array
    • ๐Ÿ‘Œ Improved CMake scripts for simplifying libcds intergration with other projects:

          add_library(mylib INTERFACE)
          target_link_libraries(mylib INTERFACE LibCDS::cds)
  • v2.3.0 Changes

    July 31, 2017
    • ๐Ÿ”จ Changed: cds::gc::HP is totally refactored:
      • simplified internal structures;
      • added ability to specify an external allocator for internal data;
      • external API for gc::HP is slightly changed: now scan type
        cannot be changed on the fly; it can be specified only in
        construction time.
    • ๐Ÿ”จ Changed: cds::gc::DHP is totally refactored to overcome some internal
      limitations. Now gc::DHP is fully adaptive variant of Hazard Pointer
      ๐Ÿšš SMR, any dependencies on count of thread are removed, count of retired
      data and hazard pointers per thread are increased automaticaly by perforce.
      External API of gc::DHP class is changed: now only initial count
      of hazard pointers can be specified in the constructor. Like new gc::HP,
      ๐Ÿ‘ the new gc::DHP supports an external allocator.
    • ๐Ÿ”„ Changed: exception handling. Now, exceptions raise by invoking new
      ๐Ÿ‘ป cds::throw_exception() function. If you compile your code with exception disabled,
      ๐Ÿ–จ the function prints an exception message to stdout and calls abort()
      instead of throwing.
    • ๐Ÿ›  Flat Combining: fixed memory-order bug that can lead to crash on weak ordered
      architecture like PowerPC or ARM
    • โž• Added: erase_at( iterator ) function to MichaelHashSet/Map and SplitListSet/Map
      based on IterableList
    • Fixed a bug in BronsonAVLTreeMap::extract_min()/extract_max()/clear().
    • โœ‚ Removed: signal-handled threaded uRCU (cds::urcu::signal_threaded) due
      ๐ŸŽ bad performance
    • โž• Added more flat-combining queue tests, thanks to Marsel Galimullin.
    • ๐Ÿ”„ Changed cmake scripts to support MacOS and ARMv7/ARMv8 (64 bit),
      thanks to Michail Komarov (
    • ๐Ÿšš Stress tests: removed command line parameter --detail-level and
      envvar CDSTEST_DETAIL_LEVEL for reducing compile time and executable size.
      To make full testset compile libcds with -DCDS_STRESS_TEST_LEVEL=N where
      N is 1 or 2.
    • ๐Ÿ”จ Changed: refactoring cds::backoff::exponential and cds::backoff::delay
      back-off strategies to avoid static data members in template classes.
    • โœ… The library is extensively tested on x86-64, PowerPC and AArch64,
      thanks to GCC Compile Farm project
  • v2.2.0 Changes

    January 04, 2017
    • ๐Ÿ”„ Changed: CMake is used for build libcds. Ancient has been removed
    • ๐Ÿ”„ Changed: unit and stress tests are migrated to googletest framework
    • โž• Added: IterableList - an implementation of ordered list with thread-safe iterator. MichaelSet/Map and SplitListSet/Map support this type of ordered list and thread-safe iterable too.
    • โž• Added: wait strategies for flat combining technique. Based on research by Marsel Galimullin and Nikolai Rapotkin.
    • ๐Ÿ›  Fixed: SkipList erase() and find() bugs that cause to infinite loop or to program crash in rare case.
    • ๐Ÿ›  Fixed: serious bug in MichaelSet::emplace() function. New node was created twice from the arguments by move semantics. However, move semantics may change internal state of the argument that can lead to an incorrect element and even an incorrect key that breaks the set logic.
    • ๐Ÿ›  Fixed: bug in FeldmanHashSet::erase_at( iterator ): due an error in precondition checking the function may incorrectly return false.
    • ๐Ÿ›  Fixed: possible double-free case in flat combining algorithm. Thanks to Amila Jayasekara who pointed me to this problem
    • Changed: cds::opt::buffer option is divided to initialized (cds::opt::v::initialized_dynamic_buffer, cds::opt::v::initialized_static_buffer) and uninitialized (cds::opt::v::uninitialized_dynamic_buffer,
      cds::opt::v::uninitialized_static_buffer) ones. The old cds::opt::v::dynamic_buffer and cds::opt::v::static_buffer classes are removed.
    • โœ‚ Removed: TsigasCysleQueue (due undecidable ABA-problem)
    • โœ‚ Removed: Michael's allocator cds/memory/michael/allocator.h
    • ๐Ÿ›  Fixed: use-after-free bug in VyukovMPMCCycleQueue internal buffer. To prevent this bug the queue uses an uninitialized buffer now.
    • ๐Ÿ›  Fixed: rare priority inversion bug in MSPriorityQueue
    • Added: for minimizing runtime of stress test the detail level for some test is added. Command line argument --detail-level=N specifies what test should be ran: each test with level not greater than N will be ran. Instead of command line arg the enviromnent variable CDSTEST_DETAIL_LEVEL=N may be used. By default, the detail level is 0 that means only limited set of the test will be ran.
  • v2.1.0 Changes

    January 06, 2016
    General release
    - Added: FeldmanHashSet/Map - an interesting hash map algorithm
      based on multi-level array, requires perfect hashing or fixed-sized keys.
      Supports thread-safe bidirectional iterators.
    - Added: BronsonAVLTreeMap - Bronson's et al AVL tree implementation
    - Added: CMake build script, thanks to Eugeny Kalishenko
    - Changed: SplitList performance improving, thanks to Mike Krinkin
    - Changed: semantic of member functions extract(), get() and its
      variants for MichaelList RCU-based specialization: extract() does not
      require RCU locking, get() now returns special wrapper object of type raw_ptr,
      see doc.
      Thus, semantics of extract()/get() of all RCU-based set and maps based on 
      MichaelList (MichaelSet/Map, SplitListSet/Map) has been changed too.
    - Changed: SplitListSet/Map functions get() and get_with() return special wrapper
      object of type raw_ptr, see doc.
    - Removed: SplitListSet/Map force_dispose() function.
    - cds::lock namespace is renamed to cds::sync. All classes defined in cds::lock namespace 
      are moved to cds::sync with new names (for example, cds:: lock ::SpinLock is renamed to
      cds::sync::spin_lock). cds::lock namespace and its contents is deprecated, it is kept 
      for backward compatibility.
    - The library has been checked by ThreadSanitizer, a lot of bugs has been fixed
    - Added support for clang 3.7 with libc++ 
  • v2.0.0

    December 30, 2014
  • v1.5

    August 26, 2020