From 379f42982b8c57ee6511cb8e498019f454323977 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期二, 07 七月 2020 11:04:39 +0800 Subject: [PATCH] update --- squeue/include/queue_factory.h | 46 +++++++++++++++++++++++++++++++--------------- 1 files changed, 31 insertions(+), 15 deletions(-) diff --git a/squeue/include/queue_factory.h b/squeue/include/queue_factory.h index 6c71d14..b898a86 100644 --- a/squeue/include/queue_factory.h +++ b/squeue/include/queue_factory.h @@ -7,17 +7,26 @@ #include "SLinkedLockFreeQueue.h" namespace QueueFactory{ + hashtable_t * getHashTable() { + static hashtable_t *hashtable = NULL; + int first; + + if(hashtable == NULL) { + first = mm_init(sizeof(hashtable_t), (void **)&hashtable); + if (first) + hashtable_init(hashtable); + } + return hashtable; + + } template <typename T> SLinkedLockFreeQueue<T>* createLinkedLockFreeQueue(int key, size_t size) { - hashtable_t *hashtable; + + SLinkedLockFreeQueue<T> *queue; - int first; - - first = mm_init(sizeof(hashtable_t), (void **)&hashtable); - - if (first) - hashtable_init(hashtable); + hashtable_t *hashtable = getHashTable(); + if ((queue = (SLinkedLockFreeQueue<T> *)hashtable_get(hashtable, key)) == NULL ) { queue = new SLinkedLockFreeQueue<T>(size); @@ -30,14 +39,9 @@ template <typename T> LockFreeQueue<T>* createArrayLockFreeQueue(int key, size_t size=16) { - hashtable_t *hashtable; + LockFreeQueue<T> *queue; - int first; - - first = mm_init(sizeof(hashtable_t), (void **)&hashtable); - - if (first) - hashtable_init(hashtable);; + hashtable_t *hashtable = getHashTable(); //LockFreeQueue<int, 10000> q; if ((queue = (LockFreeQueue<T> *)hashtable_get(hashtable, key)) == NULL ) { queue = new LockFreeQueue<T>(size); @@ -49,9 +53,21 @@ template <typename T> - LockFreeQueue<T>* createQueue(int key, size_t size) { + LockFreeQueue<T>* createQueue(int key, size_t size = 16) { return QueueFactory::createArrayLockFreeQueue<T>(key, size); } + /** + * destroy queue + */ + template <typename T> + void dropQueue(int key) { + + LockFreeQueue<T> *queue = QueueFactory::createQueue<T> (key); + delete queue; + hashtable_t *hashtable = getHashTable(); + hashtable_remove(hashtable, key); + } + } #endif -- Gitblit v1.8.0