| | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | 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; |
| | |
| | | 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; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | 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); |
| | | } |
| | | |
| | | } |
| | | |
| | | }; |