From f68d32c9f4b2f46d26d96839801d1888a93f93ed Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期四, 18 一月 2024 14:25:29 +0800 Subject: [PATCH] less memory --- src/queue/array_lock_free_queue.h | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/queue/array_lock_free_queue.h b/src/queue/array_lock_free_queue.h index 24efd10..8e415fa 100644 --- a/src/queue/array_lock_free_queue.h +++ b/src/queue/array_lock_free_queue.h @@ -235,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; } @@ -275,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; } @@ -295,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) { @@ -302,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