Fixed docs
authorkhizmax <libcds.dev@gmail.com>
Sat, 12 Mar 2016 08:59:23 +0000 (11:59 +0300)
committerkhizmax <libcds.dev@gmail.com>
Sat, 12 Mar 2016 08:59:23 +0000 (11:59 +0300)
cds/intrusive/michael_set_rcu.h
cds/intrusive/split_list.h
cds/intrusive/split_list_nogc.h
cds/intrusive/split_list_rcu.h

index 867191e7bf35150dd58773f764fea5bdf32e17f9..9157f02dbe6dbbee52e946aa1940c8f4deb64aa6 100644 (file)
@@ -156,7 +156,7 @@ namespace cds { namespace intrusive {
         //@endcond
 
     public:
-    ///@name Forward iterators (thread-safe only under RCU lock)
+    ///@name Forward iterators (thread-safe under RCU lock)
     //@{
         /// Forward iterator
         /**
index 9a7e198e55a61d31bacc2671a1557cb0b22b074c..1316360f03d15aafc81970921bd052b74641185a 100644 (file)
@@ -1135,6 +1135,8 @@ namespace cds { namespace intrusive {
         };
         //@endcond
     public:
+    ///@name Forward iterators (only for debugging purpose)
+    //@{
         /// Forward iterator
         /**
             The forward iterator for a split-list has some features:
@@ -1142,12 +1144,13 @@ namespace cds { namespace intrusive {
             - it depends on iterator of underlying \p OrderedList
             - The iterator cannot be moved across thread boundary since it may contain GC's guard that is thread-private GC data.
             - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
-              deleting operations it is no guarantee that you iterate all item in the split-list.
+              deleting operations it is no guarantee that you iterate all item in the set.
+              Moreover, a crash is possible when you try to iterate the next element that has been deleted by concurrent thread.
 
-            Therefore, the use of iterators in concurrent environment is not good idea. Use the iterator on the concurrent container
-            for debug purpose only.
+            @warning Use this iterator on the concurrent container for debugging purpose only.
         */
         typedef iterator_type<false>    iterator;
+
         /// Const forward iterator
         /**
             For iterator's features and requirements see \ref iterator
@@ -1196,7 +1199,7 @@ namespace cds { namespace intrusive {
         {
             return const_iterator( m_List.cend(), m_List.cend());
         }
-
+    //@}
     };
 
 }}  // namespace cds::intrusive
index f10775135fae6f82d9501700d4dbf1498ded94e1..3784d5a8dbf5f7c17f27a02fea242978c45dbffb 100644 (file)
@@ -542,6 +542,8 @@ namespace cds { namespace intrusive {
         //@endcond
 
     public:
+    ///@name Forward iterators
+    //@{
         /// Forward iterator
         /**
             The forward iterator for a split-list has some features:
@@ -549,6 +551,7 @@ namespace cds { namespace intrusive {
             - it depends on iterator of underlying \p OrderedList
         */
         typedef iterator_type<false>    iterator;
+
         /// Const forward iterator
         /**
             For iterator's features and requirements see \ref iterator
@@ -577,28 +580,29 @@ namespace cds { namespace intrusive {
         }
 
         /// Returns a forward const iterator addressing the first element in a split-list
-        //@{
         const_iterator begin() const
         {
             return const_iterator( m_List.begin(), m_List.end() );
         }
+
+        /// Returns a forward const iterator addressing the first element in a split-list
         const_iterator cbegin() const
         {
             return const_iterator( m_List.cbegin(), m_List.cend() );
         }
-        //@}
 
         /// Returns an const iterator that addresses the location succeeding the last element in a split-list
-        //@{
         const_iterator end() const
         {
             return const_iterator( m_List.end(), m_List.end() );
         }
+
+        /// Returns an const iterator that addresses the location succeeding the last element in a split-list
         const_iterator cend() const
         {
             return const_iterator( m_List.cend(), m_List.cend() );
         }
-        //@}
+    //@}
 
     protected:
         //@cond
index 94088046cf9ceedb4f0fb5e4c0f5d9ac1752bf15..0159b6e1a43efdb01b2f6147e94f826d7330eb3f 100644 (file)
@@ -1025,17 +1025,16 @@ namespace cds { namespace intrusive {
         //@endcond
 
     public:
+    ///@name Forward iterators (thread-safe under RCU lock)
+    //@{
         /// Forward iterator
         /**
             The forward iterator for a split-list has some features:
             - it has no post-increment operator
             - it depends on iterator of underlying \p OrderedList
-            - The iterator cannot be moved across thread boundary since it may contain GC's guard that is thread-private GC data.
-            - Iterator ensures thread-safety even if you delete the item that iterator points to. However, in case of concurrent
-              deleting operations it is no guarantee that you iterate all item in the split-list.
 
-            Therefore, the use of iterators in concurrent environment is not good idea. Use the iterator on the concurrent container
-            for debug purpose only.
+            You may safely use iterators in multi-threaded environment only under RCU lock.
+            Otherwise, a crash is possible if another thread deletes the element the iterator points to.
         */
         typedef iterator_type<false>    iterator;
         /// Const forward iterator
@@ -1086,7 +1085,7 @@ namespace cds { namespace intrusive {
         {
             return const_iterator( m_List.cend(), m_List.cend() );
         }
-
+    //@}
     };
 
 }}  // namespace cds::intrusive