From 7943aecc21c74de25175e3c6621ae2f8ea927673 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期四, 25 二月 2021 16:57:53 +0800
Subject: [PATCH] update
---
src/queue/lock_free_queue.h | 52 +++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 41 insertions(+), 11 deletions(-)
diff --git a/src/queue/lock_free_queue.h b/src/queue/lock_free_queue.h
index 354c6a4..54d0b04 100644
--- a/src/queue/lock_free_queue.h
+++ b/src/queue/lock_free_queue.h
@@ -6,16 +6,21 @@
#include <usg_common.h>
#include <assert.h> // assert()
-#include "mem_pool.h"
+#include "shm_mm.h"
#include "sem_util.h"
#include "logger_factory.h"
#include "shm_allocator.h"
#include "psem.h"
#include "bus_error.h"
#include "bus_def.h"
-#include "read_write_lock.h"
+
// default Queue size
#define LOCK_FREE_Q_DEFAULT_SIZE 16
+
+
+#define LOCK_FREE_Q_ST_OPENED 0
+
+#define LOCK_FREE_Q_ST_CLOSED 1
// static Logger *logger = LoggerFactory::getLogger();
// define this macro if calls to "size" must return the real size of the
@@ -83,10 +88,11 @@
sem_t slots;
sem_t items;
+ time_t createTime;
+ time_t closeTime;
+ int status;
public:
- sem_t mutex;
-
LockFreeQueue(size_t qsize = LOCK_FREE_Q_DEFAULT_SIZE);
@@ -95,7 +101,9 @@
/// template
~LockFreeQueue();
- std::atomic_uint reference;
+ inline void close();
+
+ // std::atomic_uint reference;
/// @brief constructor of the class
@@ -118,6 +126,20 @@
inline bool empty();
inline ELEM_T &operator[](unsigned i);
+
+
+
+ time_t getCreateTime() {
+ return createTime;
+ }
+
+ time_t getCloseTime() {
+ return closeTime;
+ }
+
+ int getStatus() {
+ return status;
+ }
/// @brief push an element at the tail of the queue
/// @param the element to insert in the queue
@@ -153,16 +175,26 @@
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);
+ status = LOCK_FREE_Q_ST_OPENED;
+
+}
+template<
+ typename ELEM_T,
+ typename Allocator,
+ template<typename T, typename AT> class Q_TYPE>
+inline void LockFreeQueue<ELEM_T, Allocator, Q_TYPE>::close() {
+ status = LOCK_FREE_Q_ST_CLOSED;
+ closeTime = time(NULL);
}
@@ -178,9 +210,7 @@
if (sem_destroy(&items) == -1) {
err_exit(errno, "LockFreeQueue sem_destroy");
}
- if (sem_destroy(&mutex) == -1) {
- err_exit(errno, "LockFreeQueue sem_destroy");
- }
+
}
template<
--
Gitblit v1.8.0