From 4d5adf4ac44c864e67e8019bb97d89199bb0b4b7 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期四, 06 八月 2020 17:06:27 +0800 Subject: [PATCH] fix survey --- src/queue/include/lock_free_queue.h | 23 ++++++++++++++++------- 1 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/queue/include/lock_free_queue.h b/src/queue/include/lock_free_queue.h index f34079f..8a65e81 100644 --- a/src/queue/include/lock_free_queue.h +++ b/src/queue/include/lock_free_queue.h @@ -78,7 +78,7 @@ int items; public: - // int mutex; + int mutex; LockFreeQueue(size_t qsize = LOCK_FREE_Q_DEFAULT_SIZE); /// @brief destructor of the class. @@ -117,7 +117,7 @@ /// @return true if the element was inserted in the queue. False if the queue was full bool push(const ELEM_T &a_data); bool push_nowait(const ELEM_T &a_data); - bool push_timeout(const ELEM_T &a_data, struct timespec * timeout); + bool push_timeout(const ELEM_T &a_data, const struct timespec * timeout); /// @brief pop the element at the head of the queue /// @param a reference where the element in the head of the queue will be saved to @@ -151,7 +151,7 @@ // std::cout << "LockFreeQueue init reference=" << reference << std::endl; slots = SemUtil::get(IPC_PRIVATE, qsize); items = SemUtil::get(IPC_PRIVATE, 0); - // mutex = SemUtil::get(IPC_PRIVATE, 1); + mutex = SemUtil::get(IPC_PRIVATE, 1); } template < @@ -163,6 +163,7 @@ LoggerFactory::getLogger().debug("LockFreeQueue desctroy"); SemUtil::remove(slots); SemUtil::remove(items); + SemUtil::remove(mutex); } template < @@ -199,13 +200,16 @@ template <typename T, typename AT> class Q_TYPE> bool LockFreeQueue<ELEM_T, Allocator, Q_TYPE>::push(const ELEM_T &a_data) { + // printf("==================LockFreeQueue push before\n"); if (SemUtil::dec(slots) == -1) { err_msg(errno, "LockFreeQueue push"); return false; } if ( m_qImpl.push(a_data) ) { - SemUtil::inc(items); + + SemUtil::inc(items); + // printf("==================LockFreeQueue push after\n"); return true; } return false; @@ -240,8 +244,9 @@ typename ELEM_T, typename Allocator, template <typename T, typename AT> class Q_TYPE> -bool LockFreeQueue<ELEM_T, Allocator, Q_TYPE>::push_timeout(const ELEM_T &a_data, struct timespec * timeout) +bool LockFreeQueue<ELEM_T, Allocator, Q_TYPE>::push_timeout(const ELEM_T &a_data, const struct timespec * timeout) { + if (SemUtil::dec_timeout(slots, timeout) == -1) { if (errno == EAGAIN) @@ -269,13 +274,15 @@ template <typename T, typename AT> class Q_TYPE> bool LockFreeQueue<ELEM_T, Allocator, Q_TYPE>::pop(ELEM_T &a_data) { + // printf("==================LockFreeQueue pop before\n"); if (SemUtil::dec(items) == -1) { err_msg(errno, "LockFreeQueue pop"); return false; } if (m_qImpl.pop(a_data)) { - SemUtil::inc(slots); + SemUtil::inc(slots); + // printf("==================LockFreeQueue pop after\n"); return true; } return false; @@ -312,6 +319,7 @@ template <typename T, typename AT> class Q_TYPE> bool LockFreeQueue<ELEM_T, Allocator, Q_TYPE>::pop_timeout(ELEM_T &a_data, struct timespec * timeout) { +// printf("==================LockFreeQueue pop_timeout before\n"); if (SemUtil::dec_timeout(items, timeout) == -1) { if (errno == EAGAIN) return false; @@ -322,7 +330,8 @@ } if (m_qImpl.pop(a_data)) { - SemUtil::inc(slots); + SemUtil::inc(slots); +// printf("==================LockFreeQueue pop_timeout after\n"); return true; } return false; -- Gitblit v1.8.0