wangzhengquan
2020-07-07 37a7bd95042c19d7334b099d50ac6dc8e07e4b4e
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);
      }
   }
};