From 2a8bdb3fa77c1212560c4d6c76139da8de70c8bf Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期六, 20 二月 2021 15:09:11 +0800
Subject: [PATCH] update
---
src/queue/lock_free_queue.h | 31 +++++++++++++++++++------------
1 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/src/queue/lock_free_queue.h b/src/queue/lock_free_queue.h
index ef6a893..425d9f8 100644
--- a/src/queue/lock_free_queue.h
+++ b/src/queue/lock_free_queue.h
@@ -13,6 +13,7 @@
#include "psem.h"
#include "bus_error.h"
#include "bus_def.h"
+
// default Queue size
#define LOCK_FREE_Q_DEFAULT_SIZE 16
@@ -82,9 +83,11 @@
sem_t slots;
sem_t items;
+ time_t createTime;
public:
- sem_t mutex;
+ // sem_t mutex;
+
LockFreeQueue(size_t qsize = LOCK_FREE_Q_DEFAULT_SIZE);
@@ -93,7 +96,7 @@
/// template
~LockFreeQueue();
- std::atomic_uint reference;
+ // std::atomic_uint reference;
/// @brief constructor of the class
@@ -116,6 +119,10 @@
inline bool empty();
inline ELEM_T &operator[](unsigned i);
+
+ time_t getCreateTime() {
+ return createTime;
+ }
/// @brief push an element at the tail of the queue
/// @param the element to insert in the queue
@@ -151,15 +158,14 @@
typename ELEM_T,
typename Allocator,
template<typename T, typename AT> class Q_TYPE>
-LockFreeQueue<ELEM_T, Allocator, Q_TYPE>::LockFreeQueue(size_t qsize): reference(0), m_qImpl(qsize) {
+LockFreeQueue<ELEM_T, Allocator, Q_TYPE>::LockFreeQueue(size_t qsize): m_qImpl(qsize) {
// std::cout << "LockFreeQueue init reference=" << reference << std::endl;
if (sem_init(&slots, 1, qsize) == -1)
err_exit(errno, "LockFreeQueue sem_init");
if (sem_init(&items, 1, 0) == -1)
err_exit(errno, "LockFreeQueue sem_init");
- if (sem_init(&mutex, 1, 1) == -1)
- err_exit(errno, "LockFreeQueue sem_init");
-
+
+ createTime = time(NULL);
}
@@ -176,9 +182,9 @@
if (sem_destroy(&items) == -1) {
err_exit(errno, "LockFreeQueue sem_destroy");
}
- if (sem_destroy(&mutex) == -1) {
- err_exit(errno, "LockFreeQueue sem_destroy");
- }
+ // if (sem_destroy(&mutex) == -1) {
+ // err_exit(errno, "LockFreeQueue sem_destroy");
+ // }
}
template<
@@ -234,7 +240,7 @@
if (m_qImpl.push(a_data)) {
psem_post(&items);
// sigprocmask(SIG_SETMASK, &pre, NULL);
- LoggerFactory::getLogger()->debug("==================LockFreeQueue push after\n");
+ // LoggerFactory::getLogger()->debug("==================LockFreeQueue push after\n");
return 0;
}
@@ -269,13 +275,13 @@
}
}
-
if (m_qImpl.pop(a_data)) {
psem_post(&slots);
// sigprocmask(SIG_SETMASK, &pre, NULL);
// LoggerFactory::getLogger()->debug("==================LockFreeQueue pop after\n");
return 0;
}
+
LABEL_FAILTURE:
// sigprocmask(SIG_SETMASK, &pre, NULL);
@@ -301,7 +307,8 @@
typename Allocator,
template<typename T, typename AT> class Q_TYPE>
void LockFreeQueue<ELEM_T, Allocator, Q_TYPE>::operator delete(void *p) {
- return Allocator::deallocate(p);
+ LockFreeQueue<ELEM_T, Allocator, Q_TYPE> * _que = (LockFreeQueue<ELEM_T, Allocator, Q_TYPE> * )p;
+ Allocator::deallocate(p);
}
// include implementation files
--
Gitblit v1.8.0