Bladeren bron

V1.3.7
1、修复了RingQueueManualMutex在release模式下出队没有数据的问题

Apple 3 weken geleden
bovenliggende
commit
81335eb933
1 gewijzigde bestanden met toevoegingen van 9 en 6 verwijderingen
  1. 9 6
      module/RingQueue/RingQueueManualMutex.hpp

+ 9 - 6
module/RingQueue/RingQueueManualMutex.hpp

@@ -32,6 +32,7 @@
 
 #include <atomic>
 #include <mutex>
+#include <iostream>
 
 #define _DefaultValue (m_isUseDefaultValue.load() ? m_defaultValue : T{})
 
@@ -55,8 +56,8 @@ public:
 
 
     /* 入队 */
-    T&& push(const T& value);
-    T&& push(T&& value);
+    T push(const T& value);
+    T push(T&& value);
 
     /* 获取队列中第一个值,但是不出队,
      * 非阻塞的方式获取,如果队列为空,会返回一个默认值 */
@@ -215,16 +216,18 @@ RingQueueManualMutex<T>::~RingQueueManualMutex()
 
 /*************** 入队 *******************/
 template<typename T>
-T&&  RingQueueManualMutex<T>::push(const T& value)
+T  RingQueueManualMutex<T>::push(const T& value)
 {
     T ret = _DefaultValue; // 默认值
     if(_isFull())
     {
+        // std::cout << "RingQueueManualMutex is full, pop one element." << std::endl;
         /* 队列已满,先出队一个元素 */
         ret = std::move(m_queue[m_front]);
         /* 出队后,前进一个位置 */
         m_front = (m_front + 1) % m_capacity;
     }
+    // std::cout << "m_front: " << m_front << "  m_rear: " << m_rear << std::endl;
     if(m_rear == -1)
     {
         m_front = 0;
@@ -233,11 +236,11 @@ T&&  RingQueueManualMutex<T>::push(const T& value)
     m_queue[m_rear] = value;
     m_rear = (m_rear + 1) % m_capacity;
 
-    return std::move(ret);
+    return ret;
 }
 
 template<typename T>
-T&&  RingQueueManualMutex<T>::push(T&& value)
+T  RingQueueManualMutex<T>::push(T&& value)
 {
     T ret = _DefaultValue; // 默认值
     if(_isFull())
@@ -255,7 +258,7 @@ T&&  RingQueueManualMutex<T>::push(T&& value)
     m_queue[m_rear] = std::move(value);
     m_rear = (m_rear + 1) % m_capacity;
 
-    return std::move(ret);
+    return ret;
 }