issue #76: added cds::atomicity::cache_friendly_item_counter to avoid false sharing
[libcds.git] / cds / container / michael_map_rcu.h
index d036e0ab3352c1a0b2cf3e2e5741ae10312ff824..93198b8d33c82855b8abb3156e81e350065121f9 100644 (file)
@@ -109,10 +109,6 @@ namespace cds { namespace container {
         // GC and OrderedList::gc must be the same
         static_assert(std::is_same<gc, typename ordered_list::gc>::value, "GC and OrderedList::gc must be the same");
 
-        // atomicity::empty_item_counter is not allowed as a item counter
-        static_assert(!std::is_same<item_counter, cds::atomicity::empty_item_counter>::value,
-            "cds::atomicity::empty_item_counter is not allowed as a item counter");
-
     protected:
         //@cond
         typedef typename ordered_list::template select_stat_wrapper< typename ordered_list::stat > bucket_stat;
@@ -137,10 +133,10 @@ namespace cds { namespace container {
     protected:
         //@cond
         const size_t    m_nHashBitmask;
-        item_counter    m_ItemCounter; ///< Item counter
-        hash            m_HashFunctor; ///< Hash functor
-        internal_bucket_type *  m_Buckets;  ///< bucket table
-        stat            m_Stat; ///< Internal statistics
+        hash            m_HashFunctor;      ///< Hash functor
+        internal_bucket_type*  m_Buckets;   ///< bucket table
+        item_counter    m_ItemCounter;      ///< Item counter
+        stat            m_Stat;             ///< Internal statistics
         //@endcond
 
     protected:
@@ -791,8 +787,8 @@ namespace cds { namespace container {
 
         /// Checks if the map is empty
         /**
-            Emptiness is checked by item counting: if item count is zero then the map is empty.
-            Thus, the correct item counting is an important part of the map implementation.
+            @warning If you use \p atomicity::empty_item_counter in \p traits::item_counter,
+            the function always returns \p true.
         */
         bool empty() const
         {
@@ -800,6 +796,10 @@ namespace cds { namespace container {
         }
 
         /// Returns item count in the map
+        /**
+            @warning If you use \p atomicity::empty_item_counter in \p traits::item_counter,
+            the function always returns 0.
+        */
         size_t size() const
         {
             return m_ItemCounter;