From acbf282b23b4cbdebca562d67132573de3902f94 Mon Sep 17 00:00:00 2001
From: Fu Juntang <StrongTiger_001@163.com>
Date: 星期五, 17 九月 2021 10:45:43 +0800
Subject: [PATCH] Merge branch 'master' of http://os.smartai.com:9091/valib/c_bhomebus
---
src/queue/array_lock_free_queue.h | 15 ++++++++++++---
1 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/src/queue/array_lock_free_queue.h b/src/queue/array_lock_free_queue.h
index a03b33e..8e415fa 100644
--- a/src/queue/array_lock_free_queue.h
+++ b/src/queue/array_lock_free_queue.h
@@ -5,7 +5,7 @@
#include <assert.h> // assert()
#include <sched.h> // sched_yield()
#include "logger_factory.h"
-#include "mem_pool.h"
+#include "shm_mm.h"
#include "shm_allocator.h"
/// @brief implementation of an array based lock free queue with support for
@@ -102,6 +102,7 @@
template<typename ELEM_T, typename Allocator>
ArrayLockFreeQueue<ELEM_T, Allocator>::~ArrayLockFreeQueue() {
// std::cout << "destroy ArrayLockFreeQueue\n";
+
Allocator::deallocate(m_theQueue);
}
@@ -234,7 +235,9 @@
}
#ifdef _WITH_LOCK_FREE_Q_KEEP_REAL_SIZE
- AtomicAdd(&m_count, 1);
+ if (m_count < Q_SIZE) {
+ AtomicAdd(&m_count, 1);
+ }
#endif
return true;
}
@@ -274,7 +277,9 @@
if (CAS(&m_readIndex, currentReadIndex, (currentReadIndex + 1))) {
#ifdef _WITH_LOCK_FREE_Q_KEEP_REAL_SIZE
// m_count.fetch_sub(1);
- AtomicSub(&m_count, 1);
+ if (m_count > 0) {
+ AtomicSub(&m_count, 1);
+ }
#endif
return true;
}
@@ -294,6 +299,7 @@
template<typename ELEM_T, typename Allocator>
ELEM_T &ArrayLockFreeQueue<ELEM_T, Allocator>::operator[](unsigned int i) {
+#ifdef _WITH_LOCK_FREE_Q_KEEP_REAL_SIZE
int currentCount = m_count;
uint32_t currentReadIndex = m_readIndex;
if (i >= currentCount) {
@@ -301,6 +307,9 @@
<< " is out of range\n";
std::exit(EXIT_FAILURE);
}
+#else
+ uint32_t currentReadIndex = m_readIndex;
+#endif
return m_theQueue[countToIndex(currentReadIndex + i)];
}
--
Gitblit v1.8.0