Browse Source

V1.3.1
1、修复了RingQueueMannelMutex的有效元素个数不准的问题

Apple 5 days ago
parent
commit
7301f0a7c8
1 changed files with 8 additions and 4 deletions
  1. 8 4
      module/RingQueue/RingQueueManualMutex.hpp

+ 8 - 4
module/RingQueue/RingQueueManualMutex.hpp

@@ -8,8 +8,8 @@
  *        3、环形队列自带互斥锁,但是不会自动加锁,需要外部手动上锁
  *        
  * 使用说明:
- *      因为是外部手动上锁,所以这里所有的函数都是阻塞函数
- *          1、入队时如果队列满,则会自动出一个元素,入读函数的返回值则是出队的元素,
+ *      因为是外部手动上锁,所以这里所有的函数都是阻塞函数
+ *          1、入队时如果队列满,则会自动出一个元素,入读函数的返回值则是出队的元素,
  *             如果队列中是指针,需要手动释放
  *          2、出队时如果队列为空,则会返回默认构建的元素值,尽量设置一个默认元素,会返
  *             回这个默认元素
@@ -58,8 +58,8 @@ public:
     T&& push(const T& value);
     T&& push(T&& value);
 
-    /* 获取队列中第一个值,但是不出队
-     * 阻塞的方式获取,如果队列为空,会一直阻塞住,直到获取到数据为止 */
+    /* 获取队列中第一个值,但是不出队
+     * 非阻塞的方式获取,如果队列为空,会返回一个默认值 */
     T front();
 
     /* 获取对立第一个数据,获取完立刻出队
@@ -222,6 +222,8 @@ T&&  RingQueueManualMutex<T>::push(const T& value)
     {
         /* 队列已满,先出队一个元素 */
         ret = std::move(m_queue[m_front]);
+        /* 出队后,前进一个位置 */
+        m_front = (m_front + 1) % m_capacity;
     }
     if(m_rear == -1)
     {
@@ -242,6 +244,8 @@ T&&  RingQueueManualMutex<T>::push(T&& value)
     {
         /* 队列已满,先出队一个元素 */
         ret = std::move(m_queue[m_front]);
+        /* 出队后,前进一个位置 */
+        m_front = (m_front + 1) % m_capacity;
     }
     if(m_rear == -1)
     {