From 37a7bd95042c19d7334b099d50ac6dc8e07e4b4e Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期二, 07 七月 2020 16:40:51 +0800 Subject: [PATCH] update --- squeue/include/queue_factory.h | 26 ++++++++++++++++++-------- 1 files changed, 18 insertions(+), 8 deletions(-) diff --git a/squeue/include/queue_factory.h b/squeue/include/queue_factory.h index 23446b0..ca88de6 100644 --- a/squeue/include/queue_factory.h +++ b/squeue/include/queue_factory.h @@ -21,11 +21,9 @@ } - template <typename T> static - LockFreeQueue<T>* createArrayLockFreeQueue(int key, size_t size=16) { - + LockFreeQueue<T>* _createQueue(int key, size_t size = 16) { LockFreeQueue<T> *queue; hashtable_t *hashtable = getHashTable(); //LockFreeQueue<int, 10000> q; @@ -34,14 +32,18 @@ hashtable_put(hashtable, key, (void *)queue); } + std::cout << "createQueue reference===" << queue->reference << std::endl; return queue; } + public: template <typename T> static LockFreeQueue<T>* createQueue(int key, size_t size = 16) { - return QueueFactory::createArrayLockFreeQueue<T>(key, size); + LockFreeQueue<T> *queue = _createQueue<T>(key, size); + queue->reference++; + return queue; } /** @@ -49,10 +51,18 @@ */ template <typename T> static void dropQueue(int key) { - LockFreeQueue<T> *queue = QueueFactory::createQueue<T> (key); - delete queue; - hashtable_t *hashtable = getHashTable(); - hashtable_remove(hashtable, key); + LockFreeQueue<T> *queue = _createQueue<T> (key); + if(queue == NULL) + return; + + queue->reference--; +std::cout << "dropQueue reference===" << queue->reference << std::endl; + if(queue->reference == 0) { + delete queue; + hashtable_t *hashtable = getHashTable(); + hashtable_remove(hashtable, key); + } + } }; -- Gitblit v1.8.0