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