From e4ce347428a0d459c7561f7bb3e180f351c11a4f Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期二, 14 七月 2020 10:38:18 +0800 Subject: [PATCH] update --- queue/include/shm_queue.h | 23 ++++++----------------- 1 files changed, 6 insertions(+), 17 deletions(-) diff --git a/queue/include/shm_queue.h b/queue/include/shm_queue.h index 70cd9cc..93bd7dc 100644 --- a/queue/include/shm_queue.h +++ b/queue/include/shm_queue.h @@ -15,19 +15,6 @@ { private: - static hashtable_t * getHashTable() { - static hashtable_t *hashtable = NULL; - - if(hashtable == NULL) { - int first = mm_init(sizeof(hashtable_t), (void **)&hashtable); - if (first) - hashtable_init(hashtable); - } - return hashtable; - - } - -private: const int KEY; public: @@ -67,9 +54,10 @@ SHMQueue<ELEM_T>::SHMQueue(int key, size_t qsize): KEY(key) { - hashtable_t *hashtable = getHashTable(); + hashtable_t *hashtable = mm_get_hashtable(); + queue = (LockFreeQueue<ELEM_T> *)hashtable_get(hashtable, key); //LockFreeQueue<int, 10000> q; - if ((queue = (LockFreeQueue<ELEM_T> *)hashtable_get(hashtable, key)) == NULL ) { + if (queue == NULL || (void *)queue == (void *)1) { queue = new LockFreeQueue<ELEM_T>(qsize); hashtable_put(hashtable, key, (void *)queue); } @@ -82,10 +70,11 @@ { queue->reference--; LoggerFactory::getLogger().debug("SHMQueue destructor reference===%d", queue->reference.load()); - if(queue->reference == 0) { + if(queue->reference.load() == 0) { delete queue; - hashtable_t *hashtable = getHashTable(); + hashtable_t *hashtable = mm_get_hashtable(); hashtable_remove(hashtable, KEY); + LoggerFactory::getLogger().debug("SHMQueue destructor delete queue"); } } -- Gitblit v1.8.0